**新しい言語(仮称)**のコンセプトです。
- 静的型つけ: 型の整合性は実行前に完全に検証される
- クラスベースオブジェクト指向 + 関数型: グローバルな関数よりも
object.method(...)という書き方を優先する,高階関数を多用する - 高級: 典型的な表現は簡単な書き方で記述できる
- 空値安全: 空値(
null)の存在は隠ぺいされる
かっこ内は その項目の由来として代表的な言語。
- 組(Python): 複数の型を並列に並べた型
- Optional(Scala): 値があるかないかを抽象的に表現する型
- Either(Haskell): 二者択一の型
- 関数型: パラメータと戻り値の型が表現される特殊な型、C#の
delegateに相当する
- 拡張メソッド(C#): 既に定義されている型に、見かけ上 メソッドを追加する
- インデクサ(C#): 任意のオブジェクトに、配列のようにアクセスできる
- 演算子多重定義
- static クラス(C#): インスタンス化できないクラス
- 構造体: データ表現のための型、プロパティを記述すればコンストラクタと Builder が自動的に定義される
- アクセサ(C#): メソッドを、見かけ上 プロパティのように扱う
??演算子(C#):Optionalの値の有無で値を決定する。Optional.orのシンタックスシュガー- パラメータ化多重定義(C#)
regionディレクティブ(C#): コードの階層構造を記述し、IDEにおけるコードの読みやすさを向上する- 束縛〔
let〕: Java のローカル final 変数に相当(ただし、イミュータブルな型でないと成りたたない) mutable: 変化しうる型- 列挙型メソッド(Java): 列挙型にメソッドを定義できる
- switch式(LISP)
- スマートデリゲーション: 完全に実装された型を用いて自動的に委譲を実現する
- コンテキスト(Perl): あらかじめ定義しておくことで、文脈に応じて式の型が自動的に変化する(例:
Integer foo = "42") nullがない: 値がないことはOptionalで表現される- 型のデフォルト値: 型のデフォルト値を定義できる(たとえば、
Integerのデフォルト値は0。)。emptyキーワードで自動的に取得される。 emptyキーワード: デフォルト値を表現するキーワード(例:Integer foo = emptyで 0 が代入される)- デフォルトパラメータ: メソッドのパラメータに初期値を定義できる
- 名前つきパラメータ: メソッド呼び出し時、値を適用するパラメータを名前で指定できる
- コロン(
:)による継承,コンストラクタのオーバライド(C#) - 広範囲可視性指定(Ruby): 複数のメソッドの可視性をまとめて指定できる
- 典型的な総称型の簡易記述: リスト,マップ,
Optional,Either,組のような典型的な総称型は、簡単な書き方で記述できる - 関数式〔ラムダ式,無名関数〕
- 空パラメータ関数式: パラメータが空の関数式は簡単な書き方で記述できる
- リスト式(JavaScript)
- マップ式(JavaScript)
- 正規表現リテラル
- ヒアドキュメント
- 名前空間によって型を扱う
- アノテーション: 型やメソッドに高度な情報を付加する