テレスコーピングコンストラクタの問題
・ほしいインスタンスを作るまでに複数のsetterを呼ぶためバグを引き起こしやすい。
・バグが発生した場合、デバッグが難しい。
// ビルダークラス
// ビルダークラス
public class Kinoshita {
private String name;
private String address;
private Integer age;
private Integer footSize;
private Integer heigth;
public static class Builder {
private String name;
private String address;
private Integer age;
private Integer footSize;
private Integer heigth;
public Builder(String name) {
this.name = name;
}
public Builder address(String address) {
this.address = address;
return this;
}
public Builder age(Integer age) {
this.age = age;
return this;
}
public Builder footSize(Integer footSize) {
this.footSize = footSize;
return this;
}
// 以下省略
public Kinoshita build() {
return new Kinoshita(this);
}
}
private Kinoshita(Builder builder) {
name = builder.name;
age = builder.age;
footSize = builder.footSize;
address = builder.address;
}
}
}
こうすることで
class UserKinoshita {
Kinoshita k = new Kinoshita.Builder("木下").age(100).footSize(50)
.address("東京都").build();
}
とかけます。
非常に見やすいですし、build()呼び出し時にチェックを入れることでフィールドをチェックすることもできます。
http://yoshio.velvet.jp/syswiki/%A5%B3%A5%F3%A5%B9%A5%C8%A5%E9%A5%AF%A5%BF%A5%D1%A5%E9%A5%E1%A5%BF%A4%AC%C2%BF%A4%A4%BE%EC%B9%E7%A4%CF%A5%D3%A5%EB%A5%C0%A1%BC%A4%F2%BB%C8%A4%A6/
備忘録
2011年1月26日水曜日
2011年1月25日火曜日
[JavaScript] 演算子
& ビット演算子
&& 論理演算子
true ? 式1 : 式2 条件演算子
typeof str データ型を調べる
返される値
・number
・string
・boolean
・function
・object
・undefined
自動型変換
文字列>数値>論理
&& 論理演算子
true ? 式1 : 式2 条件演算子
typeof str データ型を調べる
返される値
・number
・string
・boolean
・function
・object
・undefined
自動型変換
文字列>数値>論理
[JavaScript] オブジェクト
var 変数名 = new コンストラクタ名(引数1,引数2…)
オブジェクトリテラルを利用する方法
var 変数名={ プロパティ名 : 値、プロパティ名 : 値 }
配列の生成
new Array ( 引数 , 引数 )
関数
関数名のないものを無名関数という
下のように関数リテラルを利用する方法もある
関数の利用箇所であわせて関数を定義するため、
呼び出し箇所とその処理の対応関係が理解しやすくなる
var 変数名 = function(引数, 引数, ...){
return 戻り値
}
プロパティ名として文字列を使って指定した場合でも、
その文字列が識別子と同じ規則で記述されていれば大丈夫。
文字列を使った場合で、その文字列が識別子の規則では認められない形式だった場合には、
ドット演算子を使ってプロパティへアクセスすることはできない。
var obj = {'1st':100, 'Top border':80};
alert(obj.1st);
var obj = {'width':100, 'height':80};
alert(obj.width);
オブジェクトリテラルを利用する方法
var 変数名={ プロパティ名 : 値、プロパティ名 : 値 }
配列の生成
new Array ( 引数 , 引数 )
関数
関数名のないものを無名関数という
下のように関数リテラルを利用する方法もある
関数の利用箇所であわせて関数を定義するため、
呼び出し箇所とその処理の対応関係が理解しやすくなる
var 変数名 = function(引数, 引数, ...){
return 戻り値
}
プロパティ名として文字列を使って指定した場合でも、
その文字列が識別子と同じ規則で記述されていれば大丈夫。
文字列を使った場合で、その文字列が識別子の規則では認められない形式だった場合には、
ドット演算子を使ってプロパティへアクセスすることはできない。
var obj = {'1st':100, 'Top border':80};
alert(obj.1st);
var obj = {'width':100, 'height':80};
alert(obj.width);
[JavaScript] データ型
参照型とプロミティブ型に分かれる
プロミティブ型
・数値
・文字列
・論理
・NULL
・未定義値(宣言するだけで初期化されていない) ⇛ undefined
参照型
・オブジェクト
・配列
・関数
JavaScriptはデータ型をあまり気にしなくてもいい
⇛数値を格納した変数に文字列の代入可
大文字と小文字が区別される
プロミティブ型
・数値
・文字列
・論理
・NULL
・未定義値(宣言するだけで初期化されていない) ⇛ undefined
参照型
・オブジェクト
・配列
・関数
JavaScriptはデータ型をあまり気にしなくてもいい
⇛数値を格納した変数に文字列の代入可
大文字と小文字が区別される
登録:
投稿 (Atom)