Nemerle for OOP Programmers Week 0

さて,はじめましょうか.

Values and Variables

変数宣言ですが,

  • def
  • mutable

の2通りあるらしいです.defとして宣言した変数は変更不可(readonly)なのに対し,mutableで宣言した変数はいつでも変更可能なのだとか.
当然defとして宣言する場合,初期化が必須になります.

Type Inference

def/mutableによる変数宣言はこんな感じになります.
(変数の後ろにコロンをつけて,型名を置く)

def x : int = 42;

型名は省略できます(型推論ってやつ?).

def x = 42;

別にリテラルでなくても,メソッドの戻り値でも大丈夫.

mutable y = null;
// do something
y = SomeComplexObject ();

Methods

メソッドの一般的な構文はこんな感じ

メソッド名 ( パラメータ1 : 型, パラメータ2 : 型 ... ) : 戻り値の型

戻り値はメソッド内で最後に評価された値になるらしい.なのでreturn文はないみたい.以下が例...

add (number1 : int, number2 : int) : int {
    number1 + number2
}

値を返さないメソッドも定義出来て,そのときの戻り値の型はvoidだとか.このへん馴染みがあって親しみやすいですね.

Primitive Types

プリミティブ型にはこんなのがあります.やっぱり馴染みがあって親しみやすいです.

  • sbyte
  • short
  • int
  • long
  • byte
  • ushort
  • uint
  • ulong
  • string
  • char
  • void
  • float
  • double
  • decimal

Simple Examples

ここは昨日やったところですね.ちなみに昨日の例は以下のようにも書けるのだとか.

class Asker {
  public static Run () : string
  {
    System.Console.ReadLine ()
  }
}
 
def name = Asker.Run ();
System.Console.WriteLine ("Hello " + name);

気になるところもいろいろあるけど,とりあえず先に進みましょう.

Decision Statements

以下のような比較演算子があります.

  • ==
  • !=
  • >
  • >=
  • <=

比較結果はboolになります.
論理演算子も同様

  • !
  • &&
  • ||

まったく問題ありませんね.

Using conditions

if/elseが使えますが,ifには必ずelseを付けなければならないらしいです.ifだけにしたい場合には,ifではなくwhenを使えとのことです.

when (condition)
  code

これで,conditionがtrueのときのみcodeが実行されます.
conditionがfalseのときのみcodeを実行させたいならunlessを使うのだとか.

unless (condition)
  code

これも問題なしです.
ただこの節の最後には,条件文は関数でもある……みたいなことが書いてあって,このへん後で効いてくるのかな?とりあえず気にしませんけど.
ただ以下の例で,

unless (something)
  DoSomethingElse ()

最後にセミコロン(;)がないのは,はげしく気になります.

Code blocks

条件式で,条件を満たした後の処理が複数行になる場合には中カッコ{}で囲むとのこと.これもお馴染みです

Exercises

練習問題は明日やる.


とりあえずここまでは大丈夫っぽいですね.ただ次の章からはこんな風にはいかなそうです.