Strings of Life

PHP/Phalcon/MySQL/JavaScript/RegExp/Ruby/Perl/ActionScript

2012年11月

メソッドが引数という形で値を受け取る事ができるのと同様、メソッドは値を返すこともできる。メソッドから値を返すためには次のように書く。

例:

function methodName () {
  return value;
}

メソッドが実行される時、そのメソッドの返り値は、そのメソッドを呼んだcall式の値になる。

例:

function getDate () {
  date = new Date(); // Dateクラスのオブジェクトをインスタンス化
  return date.time; // timeパラメーターにはオブジェクト生成時のUNIXタイムが数値形式で入る
}

testValue = this.getDate() / 2;

call式this.getDate()の結果、this.getDate()がUNIXタイムに置き換えられる。その後、UNIXタイムが2で割られ、その計算結果がtextValueに代入される。


今日の進捗:293→306/4343

コンストラクターパラメーターと同様、メソッドパラメーターはメソッド定義と同時に作成される特別なローカル変数である。しかし、メソッドパラメーターの初期値は、そのメソッドを呼ぶ(call)際に外部から与えることができる。

メソッドパラメーターを定義する書き方は、コンストラクターパラメーターと同様である。

例:

function methodName (identifier1 = value1, identifier2 = value2) {
}

identifier1の初期値はvalue1であり、デフォルトではこの値が採用される。メソッドを呼ぶ際にパラメーターを与えてやれば、初期値を書き換えることができる。

例:

methodName(value_one, value_two)

こうすると、identifier1の値はvalue_one, identifier2の値はvalue_twoとなる。メソッドを呼ぶ際にメソッドに与えられる値のことを、引数(argument)という。

コンストラクターパラメーターと同様、メソッドパラメーターの定義に初期値を含めなかった場合、その値はメソッドを呼ぶ際に必ず与えなければならない(必須パラメーター)。

例:

function methodName (requiredParameter) {
}

このメソッドを呼ぶ際は、必ず引数を渡す必要がある。

例:

methodName(value)

必須パラメーターに値を渡さなかった場合は、コンパイルエラー又はランタイムエラーが発生する。


今日の進捗:284→293/4343

インスタンスメソッドで利用できるアクセスコントロール修飾子は、インスタンス変数に対するそれと同様である。すなわち、public, internal, protected, privateの4種類。アクセス可能な範囲も同様だが、簡単にまとめると、以下のようになる。

public:どこからでもアクセス可能
internal:定義したクラスの属するパッケージと同一のパッケージ内からアクセス可能
protected:定義したクラス内、及び定義したクラスの子孫クラスからアクセス可能
private:定義したクラス内でのみアクセス可能

アクセスコントロール修飾子をつけずにインスタンスメソッドを定義した場合、internalになる。


今日の進捗:273→284/4343

インスタンスメソッドは、オブジェクトの「振る舞い」を決定する。インスタンスメソッドを作るには、functionの定義を行う。

例:

class SomeClass {
  function SomeClass () { // コンストラクターメソッド
  }
  function identifier() { // インスタンスメソッド
  }
}

コンストラクターメソッドにはクラス名と同じ名前をつけるのに対し、インスタンスメソッドには、識別子の命名規則に従っていればどんな名前でもつけられる。

インスタンスメソッドを呼び出すには、以下のように書く(call式)。

object.methodName()


今日の進捗:254→273/4343

this.title = subject;

というコードの中では、titleという変数にsubjectという変数を代入している。代入の結果は、変数の型によって異なる。

代入元の変数がString, Boolean, Number, int, uintのインスタンスである場合には、代入先の変数に代入元の変数が直接コピーされる(値渡し)。代入の後には、メモリー上に2つの同じ値が、別の領域に確保される。この変数は互いに無関係なので、代入後に一方の値が変わってももう一方は影響を受けない。
例:

x = 1;
y = x; // yは1
x = x + 1; // xは2, yは1のまま

対して、上記以外のActionScript内蔵クラスのインスタンスや、自作クラスのインスタンスを代入した場合には、ActionScriptは2つの変数を関連付ける(参照渡し)。代入の後でも、代入元の値がメモリー上に2つ確保されるわけではない。メモリー上の領域は同一で、2つの変数の両方がその領域を参照する。片方の変数に対して加えられた変更は、もう一方の変数にも影響を及ぼす。
例:

var a = new Blog();
var b = a;
a.title = "my first blog";
trace(b.title); // "my first blog"

このコードでは、Blogオブジェクトが1つだけ生成され、aとbの双方がBlogオブジェクトを参照している(traceは出力テスト用の組み込み関数。本文中には出てきていないが説明のために使用)。aに加えた変更の結果、参照先のBlogオブジェクトの内容が変更され、Blogオブジェクトを参照しているbの出力も影響を受ける。


今日の進捗(昨日と合算):240→254/4343

このページのトップヘ