Scala Cheatsheet
Scala Cheatsheet
Language
Contributed by Kenji Ohtsuka
Thanks to Brendan O’Connor. このチートシートは Scala 構文 のクイックリファレンスとして作成された。 Licensed by Brendan O’Connor under a CC-BY-SA 3.0 license.
変数 | ||
Good
|
変数 | |
Bad
|
定数 | |
|
明示的な型 | |
関数 | ||
Good
Bad
|
関数定義 落とし穴: = を書かないと Unit を返す手続きになり、大惨事の原因になります。 Scala 2.13 より非推奨です。 |
|
Good
Bad
|
関数定義 シンタックスエラー: すべての引数に型指定が必要です。 |
|
|
型エイリアス | |
vs.
|
値渡し 名前渡し(遅延評価パラメータ) |
|
|
無名関数 | |
vs.
|
無名関数: アンダースコアは位置に応じて引数が代入されます。 | |
|
無名関数: 引数を2回使用する場合は名前をつけます。 | |
|
無名関数: ブロックスタイルでは最後の式の結果が戻り値になります。 | |
|
無名関数: パイプラインスタイル (括弧でも同様) 。 | |
|
無名関数: 複数のブロックを渡す場合は外側の括弧が必要です。 | |
|
カリー化の明示的記法 | |
|
カリー化の明示的記法 | |
|
カリー化の糖衣構文、ただしこの場合、 | |
|
部分関数を取得するには末尾にアンダースコアが必要です。 | |
|
ジェネリック型 | |
|
中間記法 | |
|
可変長引数 | |
パッケージ | ||
|
ワイルドカードでインポートします。 | |
|
個別にインポートします。 | |
|
別名でインポートします。 | |
|
Date を除いてjava.util のすべてをインポートします。 |
|
ファイル先頭の:
スコープによるパッケージ:
パッケージシングルトン:
|
パッケージ宣言 | |
data structures | ||
|
タイプリテラル (Tuple3 ) |
|
|
構造化代入: パターンマッチによるタプルの展開。 | |
Bad
|
落とし穴: 各変数にタプル全体が代入されます。 | |
|
リスト (イミュータブル) | |
|
括弧を使って添字を書きます。(slides) | |
|
先頭に要素を追加 | |
上記と同じ
|
Range の糖衣構文 |
|
|
中身のない括弧は、Unit 型 の唯一の値です。 CやJavaで言う void にあたります。 |
|
制御構文 | ||
|
条件分岐 | |
上記と同様
|
条件分岐の省略形 | |
|
while ループ | |
|
do while ループ | |
|
break (slides) | |
上記と同様
|
for 内包記法: filter/map | |
上記と同様
|
for 内包表記: 構造化代入 | |
上記と同様
|
for 内包表記: 直積 | |
|
for 内包表記: 命令型の記述sprintf -style |
|
|
for 内包表記: 上限を含んだ走査 | |
|
for 内包表記: 上限を除いた走査 | |
パターンマッチング | ||
Good
Bad
|
case をパターンマッチのために関数の引数で使っています。 | |
Bad
|
v42 は任意の Int の値とマッチする変数名として解釈され、 “42” が表示されます。 |
|
Good
|
バッククオートで囲んだ `v42` は既に存在する v42 として解釈され、 “Not 42” が表示されます。 |
|
Good
|
大文字から始まる UppercaseVal は既に存在する定数として解釈され、新しい変数としては扱われません。 これにより UppercaseVal は 3 とは異なる値と判断され、 “Not 42” が表示されます。 |
|
オブジェクト指向 | ||
|
コンストラクタの引数。x はクラス内部からのみ利用できます。(private) |
|
|
コンストラクタの引数。自動的に公開メンバとして定義されます。(public) | |
|
コンストラクタはクラスの body 部分 です。 public メンバ の宣言 読取可能・書込不可なメンバの宣言 private メンバ の宣言 代替コンストラクタ |
|
|
無名クラス | |
|
抽象クラスの定義 (生成不可) | |
|
継承クラスの定義 | |
|
継承とコンストラクタのパラメータ (要望: 自動的にパラメータを引き継げるようになってほしい) | |
|
シングルトンオブジェクトの定義 (モジュールに似ている) | |
|
トレイト 実装を持ったインターフェースで、コンストラクタのパラメータを持つことができません。mixin-able. |
|
|
複数のトレイトを組み合わせられます。 | |
|
メソッドの override は明示する必要があります。 | |
|
オブジェクトの生成 | |
Bad
Good
|
型のエラー: 抽象型のオブジェクトは生成できません。 代わりに、習慣として、型を隠蔽するファクトリを使います。 |
|
|
クラスの情報取得 | |
|
型のチェック (実行時) | |
|
型のキャスト (実行時) | |
|
型帰属 (コンパイル時) | |
Option型 | ||
|
空ではないオプション値 | |
|
空のオプション値のシングルトン | |
しかし以下のケースは同じではない
|
Null安全なオプション値の生成 | |
上記と同様
|
空のオプション値の明示的な型 空のオプション値の生成 |
|
|
パイプラインスタイル | |
|
for 内包表記構文 | |
上記と同様
|
オプション値への関数の適用 | |
上記と同様
|
上記のmap と同様だが、関数は戻り値としてオプション値を返す必要がある。 |
|
上記と同様
|
ネストされたオプション値の展開 | |
上記と同様
|
オプション値へのプロシージャの適用 | |
上記と同様
|
オプション値への関数の適用。空であればデフォルト値(y )を返す |
|
上記と同様
|
オプション値への部分的なパターンマッチの適用 | |
上記と同様
|
空のオプション値でなければtrue を返す。 |
|
上記と同様
|
空のオプション値であればtrue を返す。 |
|
上記と同様
|
空のオプション値でなければtrue を返す。 |
|
上記と同様
|
空であれば0 を返し、そうでなければ1 を返す。 |
|
上記と同様
|
値を評価し、空のオプション値であれば代替のオプション値を返す。 | |
上記と同様
|
値を評価し、空のオプションであればデフォルトの値を返す。 | |
上記と同様
|
値を返すが、空であれば例外を投げる。 | |
上記と同様
|
値を返すが、空であればnull を返す。 |
|
上記と同様
|
f を満たすオプション値 |
|
上記と同様
|
f を満たさないオプション値 |
|
上記と同様
|
オプション値がf を満たす場合はtrue を返す。そうでない場合、あるいは空であればfalse を返す。 |
|
上記と同様
|
オプション値がf を満たす場合はtrue を返す。そうでない場合はfalse を返すが、空であればtrue を返す。 |
|
上記と同様
|
オプション値が値と同じか判別する。空であればfalse を返す。 |