『Kotlinイン・アクション』第2章を読む (その1)
はじめに
Kotlinイン・アクション第2章「Kotlinの基本」を読んでいきます。
今回は以下2点を中心に書いていこうと思います。
- 知らなかったこと
- そのうち忘れそうなこと
関数
- mainはトップレベルに宣言できる
- main用にクラス作らなくてもいい
- 「ブロック本体」と「式本体」がある
- 式本体は「波括弧」「return文」「戻り値の型」を省略できる
// ブロック本体を持つ fun max(a: Int, b: Int): Int { return if (a > b) a else b }
// 式本体を持つ fun max(a: Int, b: Int) = if (a > b) a else b
変数
- 変数宣言のキーワードは2つ
- 文字列テンプレートの機能で文字列に変数を埋め込むことができる
- 単純な場合 ->
"Hello, $name!"
- 複雑な場合 ->
"Hello, ${args[0]!}"
(どんなケースが複雑な場合に該当する?)
- 単純な場合 ->
クラス
- コンストラクタの中でフィールドを宣言できる
class Person(val name: String)
でOK- ↑のように実装コードがないクラスは値オブジェクトと呼ばれる
- Kotlin のデフォルトの可視性は
public
- Java は
package private
- Java は
プロパティ
- 「プロパティ」=「フィールド」+「アクセサメソッド(getter/setter)」
- Kotlin ではプロパティは第一級の言語機能(変数や関数と同列)
- プロパティの宣言は
val
またはvar
を使うval
でプロパティを宣言するとgetterも宣言されるvar
でプロパティを宣言するとgetter/setterも宣言される
- 宣言されたgetter/setterはJavaでは命名規則に従って名前決まる
- プロパティ名
name
--> getter:getName()
, setter:setName()
- プロパティ名
isMarried
--> getter:isMarried()
, setter:setMarried()
- プロパティ名
- カスタムアクセサ
- ↓のように実装できる。isSquareとget()の間に別の変数を宣言したりするとエラーになる
class Rectangle(val height: Int, val width: Int) { val isSquare: Boolean get() { return height == width } }
パッケージ
- 全ファイルの冒頭に
package
文を持つことができる- 例:
package geometry.shapes
- 例:
- 別のパッケージに宣言されているものを使う場合は
import
文- 例:
import geometry.shapes.createRandomRectangle
- インポート時はクラスと関数を区別しない
- 例:
- packageの階層構造とディレクトリ構造は同じでなくてよい
おわりに
構文を見ているやはり簡潔でわかりやすいと感じました。
getter/setterの命名規則はちょっとクセがありそうなのでプロパティの命名には注意したいと思います。
個人的にはvalとvarが似ているのがちょっと気になりました。実際にはvalを使うケースが多いように思うので、使ってみるとそんなに気にならないかもしれません。
後半は次の記事で書きたいと思います。