2012年2月29日水曜日

Code Year 2012 - Week 6

今週はprototype。
prototypeプロパティに代入することで、動的にクラス階層を変えられるのがすごい。

2012年2月23日木曜日

Codecademyの課題をClojureで解いてみよう - その3

今回はDice Game
rand-intを使えば、最初から整数として返してくれるので楽チン。
サイコロの出目と点数を返す関数とそれを表示する関数にわけてもいいかもしれない。


(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)))))
view raw dice-game.clj hosted with ❤ by GitHub

2012年2月17日金曜日

Code Year 2012 - Week 5

Week 4を飛ばしてWeek 5。Week 4はJavaScriptの基本的な部分だったので正直あまり面白くなかった。
Week 5は面白かった。Constructorメソッドやら、オブジェクトリテラルやら。
Week 6も結構楽しみ。

2012年2月12日日曜日

Codecademyの課題をClojureで解いてみよう - その2

今回はタクシーの運賃を計算する関数を実装します。
letを使って数値に名前をつけました。
そしてletの中で通常料金の計算は終わっているという。

(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)))
view raw taxy-fare.clj hosted with ❤ by GitHub

2012年2月7日火曜日

Codecademyの課題をClojureで解いてみよう - その1

Clojureの練習にCodecademyの課題を使ってみようと思いました。

第一問はIntroductionよりFizzBuzz。
あまりきれいではないな。

(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))))
view raw FizzBuzz.clj hosted with ❤ by GitHub

2012年2月6日月曜日

MyBatisの検索結果としてインターフェイスのリストを返す

Guiceをシステムに採用して半年がたち、すっかりインターフェイスが体に馴染みました。
こうなってくると永続化層のMyBatisにもインターフェイスを返して欲しくなります。
しかし、MyBatisは初期状態ではデフォルトコンストラクタがないクラスには対応していません。

ObjectFactoryの実装とバインド
この問題を解決するには、ObjectFactoryを実装し、MyBatisModule#bindObjectFactoryTypeメソッドでバインドします。
ObjectFactoryへProviderを注入
せっかくGuiceを採用しているのですから、ObjectFactoryへProviderを注入し、オブジェクトの生成を委譲しましょう。
実装したものが次のクラスです。

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にもある。