今週はprototype。
prototypeプロパティに代入することで、動的にクラス階層を変えられるのがすごい。
2012年2月29日水曜日
2012年2月23日木曜日
Codecademyの課題をClojureで解いてみよう - その3
今回はDice Game。
rand-intを使えば、最初から整数として返してくれるので楽チン。
サイコロの出目と点数を返す関数とそれを表示する関数にわけてもいいかもしれない。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defn dice-game [] | |
(let [die1 (+ 1 (rand-int 6)) | |
die2 (+ 1 (rand-int 6))] | |
(printf "you rolled a %d and a %d for a score of %d\n" | |
die1 | |
die2 | |
(cond (or (= 1 die1) (= 1 die2)) 0 | |
(= die1 die2) (* 2 (+ die1 die2)) | |
:else (+ die1 die2))))) |
2012年2月17日金曜日
Code Year 2012 - Week 5
Week 4を飛ばしてWeek 5。Week 4はJavaScriptの基本的な部分だったので正直あまり面白くなかった。
Week 5は面白かった。Constructorメソッドやら、オブジェクトリテラルやら。
Week 6も結構楽しみ。
Week 5は面白かった。Constructorメソッドやら、オブジェクトリテラルやら。
Week 6も結構楽しみ。
2012年2月12日日曜日
Codecademyの課題をClojureで解いてみよう - その2
今回はタクシーの運賃を計算する関数を実装します。
letを使って数値に名前をつけました。
そしてletの中で通常料金の計算は終わっているという。
letを使って数値に名前をつけました。
そしてletの中で通常料金の計算は終わっているという。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defn taxi-fare [milesTraveled, pickupTime] | |
(let [ | |
baseFare 2.50 | |
costPerMile 2.00 | |
nightSurcharge 0.50 | |
cost (+ baseFare (* costPerMile milesTraveled))] | |
(if (or (<= pickupTime 6) | |
(<= 20 pickupTime)) | |
(+ nightSurcharge cost) | |
cost))) |
2012年2月7日火曜日
Codecademyの課題をClojureで解いてみよう - その1
Clojureの練習にCodecademyの課題を使ってみようと思いました。
第一問はIntroductionよりFizzBuzz。
あまりきれいではないな。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(for [x (range 1 101)] | |
(if (and (= (mod x 3) 0) (= (mod x 5) 0)) "FizzBuzz" | |
(if (= (mod x 3) 0) "Fizz" | |
(if (= (mod x 5) 0) "Buzz" x)))) |
2012年2月6日月曜日
MyBatisの検索結果としてインターフェイスのリストを返す
Guiceをシステムに採用して半年がたち、すっかりインターフェイスが体に馴染みました。
こうなってくると永続化層のMyBatisにもインターフェイスを返して欲しくなります。
しかし、MyBatisは初期状態ではデフォルトコンストラクタがないクラスには対応していません。
ObjectFactoryの実装とバインド
この問題を解決するには、ObjectFactoryを実装し、MyBatisModule#bindObjectFactoryTypeメソッドでバインドします。
ObjectFactoryへProviderを注入
せっかくGuiceを採用しているのですから、ObjectFactoryへProviderを注入し、オブジェクトの生成を委譲しましょう。
実装したものが次のクラスです。
こうなってくると永続化層のMyBatisにもインターフェイスを返して欲しくなります。
しかし、MyBatisは初期状態ではデフォルトコンストラクタがないクラスには対応していません。
ObjectFactoryの実装とバインド
この問題を解決するには、ObjectFactoryを実装し、MyBatisModule#bindObjectFactoryTypeメソッドでバインドします。
ObjectFactoryへProviderを注入
せっかくGuiceを採用しているのですから、ObjectFactoryへProviderを注入し、オブジェクトの生成を委譲しましょう。
実装したものが次のクラスです。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package myamamoto.sample.mapper; | |
import myamamoto.sample.bean.Person; | |
import org.apache.ibatis.reflection.factory.DefaultObjectFactory; | |
import com.google.inject.Inject; | |
import com.google.inject.Provider; | |
class BeanObjectFactory extends DefaultObjectFactory { | |
private static final long serialVersionUID = 1L; | |
private Provider<Person> personProvider; | |
@Inject | |
BeanObjectFactory(Provider<Person> personProvider) { | |
this.personProvider = personProvider; | |
} | |
@Override | |
public Object create(@SuppressWarnings("rawtypes") Class type) { | |
if(Person.class == type){ | |
return this.personProvider.get(); | |
} | |
return super.create(type); | |
} | |
} |
2012年2月2日木曜日
Code Year 2012 - Week 3
3週目。復習が多くていまいち物足りない。
switchで文字列が使えるのはJavaと違って便利よいね。
3項演算子も使い慣れると便利。これはJavaにもある。
switchで文字列が使えるのはJavaと違って便利よいね。
3項演算子も使い慣れると便利。これはJavaにもある。
登録:
投稿 (Atom)