Kotlin初心者から抜け出したい?それなら、
Land of Lispを読んだらどうだろう。 (すみません。9割ネタです。)
- 作者: M.D. ConradBarski,Conrad Barski,川合史朗
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/02/23
- メディア: 大型本
- 購入: 1人 クリック: 18回
- この商品を含むブログ (19件) を見る
Kotlinを初めて数ヶ月だったあなたへ
今年のGoogle I/OでKotlinがAndroidで正式サポートされるとアナウンスされた頃からでしょうか、Kotlin初心者向けの勉強会が一気に増え、実際に自分の周りもAndroidエンジニアを中心にKotlinを触る人が増えてきました。
最初はみなさんこちらの赤べこ本から始める人が多いかと思います。
Kotlinスタートブック -新しいAndroidプログラミング
- 作者: 長澤太郎
- 出版社/メーカー: リックテレコム
- 発売日: 2016/07/13
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
(英語が得意な人であればKotlin in Actionもいいですね)
- 作者: Dmitry Jemerov,Svetlana Isakova
- 出版社/メーカー: Manning Pubns Co
- 発売日: 2017/02/19
- メディア: ペーパーバック
- この商品を含むブログを見る
赤ベコ本、初心者でもとっつきやすくて本当に素敵な入門書です。ただ、入門書も読み終わって初心者からそろそろもう一歩進みたいそこのあなた。
Java(特にAndroid Java1 )をずっと続けてきてからKotlinに移行した人、そんな人におすすめなのが Land of Lisp!
なぜLand of Lispがおすすめなのか
一体どこからLispが出てきたのか?この本は半分Lispについての本ですが、 半分は関数型プログラミングについての入門書です。
Kotlinは関数型プログラミングのパラダイムを取り入れています。
例えば、高階関数。公式ドキュメントを読む時も高階関数(Higher-Order Functions)とかさらっと出てきます。それが一体なんなのか、なんのためにあるのかちゃんと理解していますか?
例えば、遅延評価。Java 8が使えないAndroidでは初めましての人も多いかと思います。Kotlinではvalで再代入不可な変数を宣言することができますが、これをpropertyで持つとなると当然初期化をする必要があります。クラスのインスタンス化時点では取れない情報を使って初期化したい時、遅延評価が本当に強力な機能となります。
Androidの例で恐縮ですが、Activityのpropertyとしてintentのextraを持ちたい場合、下記のようなコードはかけません。なぜならクラスのインスタンス化時点でthis.intent
は正しいintentが入っていないからです。
class HogeActivity : AppCompatActivity() { private val fuga = this.intent.getStringExtra(FUGA_KEY) // 動かないよ! }
そこでvalで宣言するのを諦めてvarにして書けないことはないのですが、イマイチなコードです。
class HogeActivity : AppCompatActivity() { private var fuga = "" // 動くけどイマイチだよ! override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) this.fuga = this.intent.getStringExtra(FUGA_KEY) } }
そこで、下記のように遅延初期化すれば解決します。このコードの場合、初めてfuga
にアクセスしようとした時にfuga
が初期化されます。なので、例えばonCreate()
でfuga
にアクセスするとこの時にはthis.intent
に正しい情報が入っているのでfuga
には想定通りの値で初期化されます。これでfuga
をvalで宣言することができます。
class HogeActivity : AppCompatActivity() { private val fuga by lazy { this.intent.getStringExtra(FUGA_KEY) // 動くよ! } }
おまけ
そもそもなんでLand of Lispなんか読み始めたかというと昨年の誕生日に同僚氏が自宅に送りつけてきたからです。(当然wishlistには入れていません。)今まで5人くらいに送りつけて実際に読み始めたのは私が初めてだそうです😇
読了して思ったのは「この本やっぱり頭おかしいな」でした。
最後に。この本を読んで副作用満載のコードをみると発狂しそうになるかもしれませんが責任取れませんので悪しからず。