Swift programming 事始め: Hello, world!

SwiftでMacOSXアプリケーション開発にはXcode6.1から

 SwiftでMacOSXアプリケーションを開発するには,Xcode6.1+OSX10.9以上(SDK10.10)が必要である.Xcode6.1はOSX10.10Yosemiteとリリースを同じくしたのだが,Yosemiteリリース前まではApple開発者登録をしないとダウンロードできなかった.Xcode6.0では,プラットフォームでiOSを選ばないと開発言語にSwiftが選べなかったのだ.

  • Xcode6.1の起動とプロジェクトの開始

 コマンドラインツール開発を選ぶとHelloworldプログラムのSwiftソースコードが表示される.

    • Create a new Xcode project>OS X/Application-Command Line Tool=Next>Product Name=HelloWorld,Language=Swift/Create
import Foundation

println("Hello, World!")

 実行はメニューProductから.実行結果はXcodeのコンソールに表示される.

    • Product>Run
Hello, World!
Program ended with exit code: 0


Swift programming 基礎編

変数宣言,定数宣言,代入と文字列

  • 変数はvar,定数はlet,代入は=で文字列はダブルクオート("")

 変数定数は,Scalaではvarとvalだったけど,見間違えやすいよね.これはSwiftさんナイス.文字列はダブルクオートのみでシングルクオートは使わない.1文字の場合でもダブルクオート.代入は:=を使ってほしかったかも.

基本データ型

  1. 数値型; Int,UInt,Float,Double
  2. 論理型; Bool/true,false

 特殊な値としてnil,型宣言としては型の後に?を付けるとオプショナル型として変数にnilが代入できる.オプショナル型の変数の参照は変数名末尾に!を付加.

従前のプログラミング言語として違うのは,数値型,論理型にもnil値が代入できること.この表現力の向上は地味に嬉しい.

文字列の連結+と基本データ型の相互変換

 数値型を文字列に連結する時は,明示的に文字列型にしないといけないオブジェクト指向言語なんだからできてよさそうなきもするが.ここは残念なところ.

文字列から数値型のうち整数値には変換メソッド.toInt()があるが,浮動小数点型への変換メソッドがない.どうなのこれ.

逆に数値型から文字列への変換メソッドもない様子.ただ,プロパティとして.descriptionがあるこんな長いのいちいち見たくないぞ

ということで,数値型から文字列の変換は,文字列中で\()を使うことになるようだ.括弧の中は変数だけでなく,式が入れられる.書式付としたい場合は,String(format:書式文字列, ...)を使う.Cで言うprintfやsprintfでのアレ.ただし,Stringが配列Array型のせいで%sが使えない.この場合も,書式文字列中に\(文字列変数)として埋め込めばいいようである.なお,バックスラッシュはOption+¥で入力する.

標準出力

  • print, println,NSLog

print,prinlnはオブジェクトを適切に処理するらしく,数値型でも文字列型でも気にせず使える.一方でNSLogはSmalltalk由来のようで,常に書式を指定しないといけない様子.メリットデメリットがあるようだが...




 
 

Swift Programming: 演算子と式、および制御構造

Swiftの演算子はおよそCに準じる。新たに加わるものもあるし、異なるものもある。

演算子は三種類、単項演算子二項演算子三項演算子があり、また独自の演算子を定義できる。
この演算子オーバーロードには、{prefix|infix|postfix} operator 演算子名(引数) と、関数定義funcの代わりにoperatorを使用する。

  • 前置; prefix
  • 中置; infix
  • 後置; postfix

同様に、二項演算子三項演算子はそれぞれ、二引数三引数でBool値を返す関数であるといえる。

演算子

  • 単項演算子
    • 負; -
    • インクリメント; --
    • デクリメント; ++
  • 二項演算(オーバーフロー演算)
    • 加算; +,(&+)
    • 減算; -,(&-)
    • 乗算; *,(&*)
    • 除算; /,(&/)
    • 剰余; %,(&%)
    • 否定(単項演算); !
    • 論理和; &&
    • 論理積; ||
    • nil合同; a ?? b (a != nil ? a! : b と等価)
  • 三項演算
    • A ? B : C

代入、比較、範囲

算術演算以外にも、代入演算、比較演算、範囲演算が用意されている

  • 代入; =
    • 複合代入; +=,-=,*=,/=
  • 比較; ==,!=,<,>,<=,>=,===,!==
  • 範囲; ...,..
    • 0...5の場合,5が入る
    • 0..<5の場合,5は入らない

制御構造

制御構造

  • 定回反復文
    • for 一時変数 in 変数 {}
    • for var 一時変数 = 初期値; 停止条件; 反復式 {}
  • 不定回反復文
    • while 条件 {}
    • do {} while 条件
  • 条件文
    • if 条件 {} else {}
    • switch VARIABLE {case VALUE: default:}
  • フロー制御
    • continue
    • break
    • fallthrough
    • return
  • ラベル文

 フロー制御文の引数に識別子をラベルとして用いることで指定のラベル位置へ制御を移せる

Swift Programming: データの構造化

 基本データ型を複数組み合わせてデータを構造化することができる

文字列; String; ""
配列; Array; []
ハッシュ; Dictionary; [:]
タプル; ()
クラス; class
構造体; struct
クロージャ; {(引数) -> 戻り値の型 in 文; return 戻り値}
Generics; func 型名<型引数>(引数) -> 戻り値の型 {文}

静的型付言語ではGenericsがないと、データ構造は全く同じで型だけ違うそういうデータ型をたくさん定義しなければならなくなるので、これはうれしい。