理想の静的型付き言語?いやもうちょっと。
Swiftの型推論はいい。非常に。オプショナル型への配慮も。でも、Rubyにあるていど慣れた身にとっては、若干惜しいと思うところも。
厳密には言語仕様に含まれないかもしれないが、IO周りが弱い印象。
各種変数の識別子に違いがみえにくいので、@開始ならインスタンス変数等、そういうやり方になってくれるといいのになと。
文字列を””のみにしぼったことで、シングルクオートが自由になったから、シンボル化に’を使用してはどうだろうか。Swiftではhashに:をつかうので区別がつかない
以下感触。
Swift に触れてみて、いいアイデアだな、と思ったところ。
- 定数let、変数var
- オプショナル型
- 抽象的な文字型Character
- 変数識別子に日本語他絵文字も可能になった
- 数値リテラルに_を使えるようになった
- structは値。classは参照、struct型の代入は常にコピーと役割を明確にしたところ
- 列挙型に関数定義も許したことで、プロトタイプパターンが容易に扱えるようになった
これはいいわ、というところ
- 型推論、Generics、enum、for-in、クロージャ、
- ブロック{}、外部変数名、switchの強化、breakなし
- structのイニシャライザは定義しなくてもメンバを引数としたイニシャライザが使える
- タプルで宣言なしに動的にインスタンス化できる
- assertionをおすすめしているところ
- Nil合同演算子??。a??bは、a !=nil ? a! : b
- lazy、遅延評価
- プロパティオブザーバー、willSet,didSet
- オプショナルチェイン、メソッド呼び出しで戻り値nilで、続けてメソッド呼び出ししても例外にならない
そうきたか、というところ。
- 文字列はダブルクオートのみ
- 条件節に()不要
- 関数の戻り値は後置
- 配列値の型指定[Int]
- 範囲演算子..
おや?と思うところ
- sort, sorted がある。どちらも配列のメソッドではない…
- インターフェースの共有はいいとして、実装の共有が?
- 多重代入はできない…
- 配列の添字に負数が指定できない…
それはどうなの、というところ。
- 文字列から浮動小数点への変換メソッドがない
- Stringにjoinがありsplitがない、split("A,B",{$0==","})とか。StringはほぼArray
? - 配列で、map, reduce を多用しそうなところ
- 演算子オーバーロードがトップレベルスコープでしか宣言できない
だめやろ、というところ