2013年6月23日日曜日

[CoffeeScript]コンストラクタ

CoffeeScriptでコンストラクタを定義するには、classにconstructor関数を定義するだけでよい。

例:
class Test
  constructor : ->
    console.log 'コンストラクタが呼び出された'

// JavaScriptに変換されたコード
// 
(function() {
  var Test;

  Test = (function() {

    function Test() {
      console.log('コンストラクタが呼び出された');
    }

    return Test;

  })();

}).call(this);

実行結果:
test = new Test()を実行してみると、以下の結果となりインスタンス作成時にconstructor関数が呼び出されていることが確認出来ます。
/usr/local/bin/coffee hoge.coffee
コンストラクタが呼び出された

2013年6月22日土曜日

railsでlabelに表示する名前をmodelの属性名から変更する方法

railsでmodelを使ってlabelを出力するとmodelの属性名になる。
任意の値をlabelに出力したい場合には、以下のコードのようにlabelの2番めの引数に指定する。

<%= f.label :name, "名前" %>

2013年6月7日金曜日

PL/SQLが依存しているオブジェクトを確認する方法

PL/SQLプログラムの依存しているオブジェクトを確認する方法。

依存オブジェクトの確認は、USER_DEPENDENCIES(ALL_DEPENDENCIESやDBA_DEPENDENCIES)ビューで行える。

主なカラム
NAME オブジェクトの名前
TYPE オブジェクトのタイプ
TYPE オブジェクトのタイプ
REFERENCED_NAME 参照されるオブジェクトの名前
REFERENCED_TYPE 参照されるオブジェクトの型

create or replace procedure p_hoge
is
begin
  for c in (select * from table1)
  loop
      dbms_output.put_line(c.column_1);
  end loop;
end;
/

実行結果

  1  select NAME, TYPE, REFERENCED_NAME, REFERENCED_TYPE
  2  from user_dependencies
  3* where name = 'P_HOGE'

NAME                           TYPE                           REFERENCED_NAME                          REFERENCED_TYPE
------------------------------ ------------------------------ ---------------------------------------- ------------------------------
P_HOGE                         PROCEDURE                      STANDARD                                 PACKAGE
P_HOGE                         PROCEDURE                      DBMS_OUTPUT                              SYNONYM
P_HOGE                         PROCEDURE                      TABLE1                                   TABLE
P_HOGE                         PROCEDURE                      SYS_STUB_FOR_PURITY_ANALYSIS             PACKAGE

2013年6月2日日曜日

[CoffeeScript]クラスの継承

クラスの継承はJavaと同じようにextendsを使用して行える。

# 親クラス
class Parent
  constructor : (@param1, @param2) ->

  toString : ->
    "param1:#{@param1}, param2:#{@param2}"

# Parentを継承したChildクラス
class Child extends Parent
  param1Length : ->
    @param1.length

  toString : ->
    "param1->#{@param1}, param2->#{@param2}"

2013年6月1日土曜日

[CoffeeScript]インスタンスメソッドとインスタンス変数

  • インスタンス変数
    コンストラクタやメソッド内で「@」で始まる変数を作るとインスタンス変数となる
  • インスタンスメソッド
    コンストラクタ内で「@」から始まるメソッドを定義するとインスタンス(インスタンス毎に異なる)メソッドとなる。
    クラス直下にメソッドを定義すると全てのインスタンスで共有されるインスタンスメソッドとなる。(prototypeに追加されるメソッド)

# class宣言
class Book

  # コンストラクタ
  constructor : (title, author) ->
    # インスタンス変数に値を設定
    @title = title
    @author = author

    @getTitle = -> title
    @getAuthor = -> author

  # インスタンスメソッド(すべてのインスタンスで同一のメソッド)
  toString : ->
    "title->#{@title}:author->#{@author}"


book = new Book("タイトル", "ほげ")
console.log book.toString()

JavaScriptに変換した結果

インスタンス変数やインスタンスごとのメソッドは「this」に追加されている。
インスタンスで共有されるインスタンスのメソッドはBookクラスの「prototype」に追加されている。
// Generated by CoffeeScript 1.6.2
var Book, book;

Book = (function() {
  function Book(title, author) {
    this.title = title;
    this.author = author;
    this.getTitle = function() {
      return title;
    };
    this.getAuthor = function() {
      return author;
    };
  }

  Book.prototype.toString = function() {
    return "title->" + this.title + ":author->" + this.author;
  };

  return Book;

})();

book = new Book("タイトル", "ほげ");

console.log(book.toString());