技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

noop の概要を読む

http://code.google.com/p/noop/
の wiki を読んで、言語仕様を確認してみる。

というかそれ以外に選択肢が無い。

  • 出たばっかりでサードパーティドキュメントがほぼない。
  • クラスの書き方が分からん(書いては見たがエラーで、しかもJavaの例外。何が悪いのか不明)

名前順に上から見ていく。以下は気になった箇所だけメモ。訳しなくても楽勝そうなのはそのまま転記。()内は僕のコメント。

マズは概要を読む

http://code.google.com/p/noop/wiki/Features
Fundamentals

  • プリミティブ型はなし,すべてがオブジェクト.
  • 強い型付け
  • 余計な書式は増やさない: セミコロンと()は要る。
  • プロパティを持つ(Javaでいうgetter, setter)
  • static の設置を許さん
  • 実行可能、かつコンパイル可能なドキュメント構文
  • クラスのメタデータ保持
  • 常にテストとクラスのペアをつなげられる

Readability

  • 変数やメソッドコールに、簡易書式や糖衣構文を使わない。

Good stdlib

  • 他言語からのいいものを継承する。
  • Date/Time の API に JodaTime を使う。
  • 並列処理のために util.concurrent を使う。

Injection

(いかんな、この辺のライブラリ触ったことねーぞ。)

Immutability

  • final (継承不可能)がデフォ,参照が変わるような変数にゃ mutable キーワードを使え

Strong inferred typing

  • null らめぇ, 型はデフォルトでは null を許容しない。
  • だから Option を使って nullable な T を作る。

Exceptions

  • Only unchecked exceptions

Class parameters and properties

class Foo(Bar bar) {} defines the default constructor, has a read-only property bar, like Scala.

Testing

  • test キーワードは、テストスイートと内包されたテストをコンパクトに記述できる構文。
  • テストブロックを製品コードに突っ込める,。
  • tests はクラスに対し "friend" 関係で接続できる, ホワイトボックステストやプライベートメソッドのテストのためだ

Literals

  • String is a type literal
  • "Hello" is a string literal
  • """line1\nline2""" is a multi-line string literal
  • /.*/ is a pattern literal
  • { "a": "b", "c": "d" } is a hash literal (should evaluate to most specific type possible)
  • [1,2] is an array literal
  • `http://google.com` is a URI literal (like Fan, is it useful?)

うーん文法とか無いのね(汗