2014年6月11日水曜日

Swift Tour (1)

The Swift Programming Language の A Swift Tour より要約する.

もちろん Hello, world から始めよう.

println(“Hello, world”)

Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks. https://itun.es/jp/jEUH0.l

main関数は必要ない.セミコロンすら必要ない.

定数は次のように定義する.

let myConstant = 42

Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks. https://itun.es/jp/jEUH0.l

定数 myConstant は型を持つが,その型は推論されるので明示する必要はない.

整数には10進数の他に2進数,8進数,16進数リテラルがあり,2進数でも指数表記が使えたり,16進数で実数が表記できたり,1_000_000のようにアンダースコアを挿入できたりとObjective-C言語に比べると大幅に拡張されている.

ビルトイン型には Bool, Int, Float, Double, String がある.後述するが,関数は第一級オブジェクトであり,また配列型(Array),辞書型(Dictionary),列挙型,タプル,構造体,クラスがある.また他の言語に見られない特徴として,型を「オプショナルな型」にすることができる.これはHaskellのMaybeモナドに近いものである.リファレンスはあるがポインタは無い.

変数を定義したいときは次のようにする.

var myVariable = 42
myVariable = 50

Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks. https://itun.es/jp/jEUH0.l

変数も型を持つが推論される.型を明示したい場合は次のようにする.

var explicitDouble: Double = 70

Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks. https://itun.es/jp/jEUH0.l

型は静的に変更できる.

let label = “The width is “
let width = 94
let widthLabel = label + String(width)

Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks. https://itun.es/jp/jEUH0.l


文字列リテラル “…” の中に \(…) があると,括弧の中身は展開される.

let apples = 3
let appleSummary = “I have \(apples) apples.”

Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks. https://itun.es/jp/jEUH0.l

配列を作ることが出来る.

let individualScores = [75, 43, 103, 87, 12]

Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks. https://itun.es/jp/jEUH0.l

配列要素へのアクセスはいつもの方法で良い.

var shoppingList = [“catfish”, “water”, “tulips”, “blue paint”]
shoppingList[1] = “bottle of water”

Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks. https://itun.es/jp/jEUH0.l

配列はループで舐めることが出来る.

for score in individualScores {
  // …
}

Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks. https://itun.es/jp/jEUH0.l

// はコメントである.

if文も普通だ.変数scoreがあったとすると

if score > 50 {
  // score > 50 のとき…
}
else {
  // それ以外のとき…
}

Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks. https://itun.es/jp/jEUH0.l

条件式はBool型でなければいけない.Bool型が取りうる値は true, false だ.YESとNOではない.

型名の後ろに「?」をつけると,オプショナルな型になる.これはHaskellでいうところのMaybeモナドだ.「?」をつけられた型は,何らかの値か,さもなくばnilを保持できる.オプショナルな型以外はnilを保持できない.

例えば

var optionalName: String? = “John Appleseed”

Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks. https://itun.es/jp/jEUH0.l

の optionalName は String? 型(オプショナルなString型)なのでnilになれる.これは何らかの例外的状況を表すのに使える.今は強制的にnilを代入してみよう.

optionalName= nil

オプショナルな型を扱うための特別なif文がある.

var greeting = “Hello!"
if let name = optionalName {
  greeting = “Hello, \(name)”
}

Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks. https://itun.es/jp/jEUH0.l

もし optionalName がnilでなければ,その値はnameに束縛され,次のブロックが実行される.

switch文はデフォルトではフォールスルーしない(いつもbreakする).

let vegetable = “red pepper”
switch vegetable {
  case “celery”:
    let vegetableComment = “Add some raisins and make ants on a log.”
    // breakは要らない
  case “cucumber”, “watercress”:
    let vegetableComment = “That would make a good tea sandwich.”
  case let x where x.hasSuffix(“pepper”):
    let vegetableComment = “Is it a spicy \(x)?”
  default:
    let vegetableComment = “Everything tastes good in soup.”
}

Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks. https://itun.es/jp/jEUH0.l

ちなみにdefaultは省略できない.

case に続く条件式では if let ... 構文と同じように変数束縛が行える.また変数束縛後にwhere節を置いて条件の絞り込みが行える.

多値を受け取るメカニズムがあちらこちらにある.

let interestingNumbers = [
    "Prime": [2, 3, 5, 7, 11, 13],
    "Fibonacci": [1, 1, 2, 3, 5, 8],
    "Square": [1, 4, 9, 16, 25],
]
var largest = 0
for (kind, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
        }
    }
}

Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks. https://itun.es/jp/jEUH0.l

サンプルは省略するが,whileループもあるし,do-whileループだってある.

関数とクロージャについてはまた次回に.

0 件のコメント:

コメントを投稿