Swiff 基礎文法最速マスター
Swiff とは?
Swiff とは、プログラミング言語の名前です。
Swiff を日本語にすると、えーっと何かの擬音なのは覚えてるんだけど、忘れました。
名前の由来は Apple が発表した Swift 言語をおちょくったニュアンスで、名前空間をもう少し大事にしてほしいなという気持ちと
願わくば Swift を押しのけて有名になってほしいなという気持ちで命名しました。
Swiff のインストール
Swiff は架空の言語です。
つまり、処理系が無い幻の言語ということです。
Swiff のプログラム実行
Swiff プログラムを実行するためには 2 つの方法があります。
ありゃ、 3 つですね。 それぞれについて説明します。
swiffc
の使い方
swiffc
は Swiff のソースコードから実行可能バイナリを生成します。
実際には C 言語のソースコードを生成し、gcc
などでネイティブな実行可能バイナリを生成しています。
swiffc -t
で C 言語のソースコードを生成することも出来ます。
Swiff は特定のエントリポイントの要らないプログラム言語です。
ですから、main
関数が必要ありません。
println "Hello, World!"
この様にトップレベルに書くだけで実行されます。
コンパイルはこの様に行います:
% swiffc ./hello.swiff
なお、ソースコードの拡張子は swiff にしておこうかなと思います。
実行可能バイナリを実行する場合は:
% ./hello
と打ちます。
swiff
の使い方
swiff
は Swiff VM 上で Swiff のソースコードを実行します。
#!/usr/bin/swiff println "Hello, World!"
shebang を付けてコマンドのように実行することもできます。
% chmod +x ./hello.swiff
% ./hello.swiff
Hello, World!
swiff -i
の使い方
swiff -i
または swiff --interactive
は Swiff VM を対話的実行環境で動かします。
% swiff -i
swiff> 12 + 12
24
swiff> println "Hello, World!"
Hello, World!
swiff> exit
基礎
それでは文法の方に移りましょう。
Swiff のソースコードは以下のような見た目をしています:
void main() { let condition = false; until ( condition ) { if ( hoge() > 0 ) { condition = true; } } }
Swiff は ALGOL 型波括弧系言語である C 言語に限りなく近い構文を採用しています。
コメント
コメントは C++ 言語で使えるコメントと同じです。
// 一行コメント /* 複数 行 コメン ト */
端末への出力
今まで何回か出てきましたが、println
は与えられた値を端末*1に出力して改行する関数です。
println 42
改行しない print
もあります。
以下のコードはどちらも Hello, World!
を出力し、その後改行します:
print "Hello, World!\n" println "Hello, World!"
値をフォーマットして出力してくれる printf
もあります。
変数の宣言
ローカル変数は let
で宣言します。
ここが C 言語の構文と異なるところです。
let foo : int = 42 let baz = 3.14
let
で宣言した変数は mutable(変更可能)です。
let foo : int = 42 foo = 1782
immutable (変更不可)な定数を宣言する場合は val
を使います。
val quz : int = 42
値を変更しようとすると、シンタックスエラーとなります。
どちらの場合も型推論されるので、型を省略することも可能です。
let foo = 42 let baz = 3.14 val quz = new object()
式
C と Swiff の大きな違いとして、C では「文」として扱われるものが、Swiff では「式」として扱われます。
例えば、画面の幅より外に表示オブジェクトが存在した場合、自動的に画面の枠内に移動させたいというような場合には C 言語話者ならばこの様に書くでしょう:
let position_x : int = tmp_x; if ( 0 >= tmp_x ) { position_x = 0 } else if ( tmp_x < screen_width ) { position_x = screen_width }
Swiff なら、if
は文ではなく式なので position_x = ~~~~
というような代入文の繰り返しを省略してこの様に書けます:
let position_x : int = if ( 0 >= tmp_x ) { 0 } else if ( tmp_x < screen_width ) { screen_width } else { tmp_x }
(define position-x (cond ((>= 0 tmp-x) 0) ((< tmp-x screen-width) screen-width) (:else tmp-x)))
if
だけではなく、ブロックも式なのでこんな風にも書くことができます:
let frame = { let position = new Point( rect.width / 2.0f, rect.height / 2.0f ) let size = new Size( 300, 500 ) new Rectangle( position, size ) }
基本的な型
真偽値型 (bool)
true
と false
の 2 つの値のみをとれる型です。
以下のオペレータが定義されています:
true && false // => false true || false // => true !true // => false
C 言語などと同じ様に &&
と ||
は短絡評価です。
数値
言語組み込みの数値型には大きく分けて「整数」、「浮動小数点数」、「十進数」の 3 種類があります。 整数型は細かい種類の型に分けることができます。
- 整数 (Integer)
- 固定長整数 (Fixnum)
- 符号付き整数 (signed int)
- 符号無し整数 (unsigned int)
- 可変長整数 (Bignum)
- 浮動小数点数 (Float)
- 単精度浮動小数点数 (Single)
- 倍精度浮動小数点数 (Double)
- 十進数 (Decimal)
(l ω l〃) うぐぅ…、フラットに表示されてる…