もくもく独書 とは
Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plus)
- 作者: 石川洋資,西山勇世
- 出版社/メーカー: 技術評論社
- 発売日: 2017/02/07
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (4件) を見る
上記の Swift実践入門を読みながら、思った事をTweetしていく取り組みです。
Swiftをはじめから丁寧にやっていきます。 なるべく毎日更新を目標にする。
リンク
前回:
次回:
今日の取り組み
今日は第二章「変数、定数と基本的な型」について。
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年5月30日
書籍はおなじみSwift実践入門。 https://t.co/k2xKFBgjNL
#もくもく独書
[https://twitter.com/ikkitang/status/1001821024655159297:embed#変数、定数の型として一般的なプログラムに登場する汎用的な値を表す型は組込型として提供されており、Bool型、数値型、String型、Array
宣言方法としては `var 変数名: 型名` で変数を定義でき、 `let 定数名: 型名`で定数を定義できる。 #もくもく独書
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年5月30日
": 型名"の部分を型アノテーションという。勿論、一日目で言ったように型アノテーションは型推論によって省略する事もできる。 例えば `var char: String = "Hello"` などは "Hello" がString型なので `var char = "Hello"` とかける。 #もくもく独書
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年5月30日
自分は 基本 型推論が利用できるケースでは型アノテーションは積極的に省略して書いてます。(こんな事わざわざ言うまでも無いのかもしれんけど。。) そういえば、これも API Design Guidelines とかにあるんかな? #もくもく独書
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年5月30日
また、Swiftでは型を確認するための `type(of: T)` という関数が提供されている。 この関数もジェネリクスにより定義されている。 戻り値はMetatype型でクラスや列挙型等が何であるかを判別にするための特別な型。 例として以下のような感じ。pic.twitter.com/K8XL6XsLg6 #もくもく独書
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年5月30日
また、変数、定数にはアルファベット・数字だけでなく、ひらがなも使用可能でもっというと、漢字や🍺などの絵文字も利用する事ができる。
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年5月30日
ちなみに僕は日本語変数とか肯定派です。サポートしてるなら使えばいいのでは?って思ってる。 #もくもく独書
変数や定数は基本的に値を代入して使う。 変数・定数の型(型アノテーションで宣言 もしくは 型推論)にそぐわない値を代入しようとするとコンパイルエラーが発生する。 pic.twitter.com/LWgRotodRD
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年5月30日
ちなみに 1 とか "abc" などの 値をプログラムに直接表記する書式を `リテラル` という。 #もくもく独書
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年5月30日
変数・定数を扱うにあたって 変数の `スコープ` も頭に入れておく必要がある。
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年5月30日
スコープとは、変数、定数、関数などの名前の有効範囲を表すもの。
スコープはグローバルスコープとローカルスコープの2種類に分類する事ができる。 #もくもく独書
スコープの認識はこんな感じか。 pic.twitter.com/3PYvJBeVE1
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年5月30日
余談だが、Swiftには型エイリアスというものがある。
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年5月30日
型エイリアスはtypealiasキーワードによって`typealias 新しい型 = 定義済の型` として定義ができる。
例えば、地球上の座標を示す CLLocationDegress型はDouble型の型エイリアスで定義されている。 #もくもく独書
続いて、String型について#もくもく独書 pic.twitter.com/yPjwacje2i
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年5月30日
また、String型の個々の文字については Character型で表される。
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年5月30日
Character型の集まりは String.CharacterView型で表される。
この "."CharacterViewの "."は CharacterViewがString型の中に(ネストして)定義されている事を表す。 #もくもく独書
Character型は "a"などの単一の文字を表す。 文字列リテラルによって初期化する事ができるが、文字列リテラルのデフォルトの型は String型なので型推論はString型とみなす。 Character型にするときは 型アノテーションを指定する必要がある。
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年5月30日
#もくもく独書
[https://twitter.com/ikkitang/status/1001835936856997889:embed#続いて配列を表す型: Array
Dictionary<Key, Value> 辞書型について。辞書型はキー:値のペアを持つコレクションである。Array型のときと同様 Key, Valueはプレースホルダー型である。
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年5月30日
Dictionary<Key, Value>型は ["key1":"val1", "key2":"val2" ]という辞書リテラルで表現できる。 #もくもく独書
ただし、辞書型のKeyとして利用できる型には宣言があり、これは Hashable プロトコル(ハッシュ値が計算可能である事)に準拠している必要がある、という制限がある。 #もくもく独書
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年5月30日
[https://twitter.com/ikkitang/status/1001837659486998529:embed#辞書型のKeyにないものをサブスクリプトでアクセスしてもエラーにはならずにnilが返る。Dictionary型の値をサブスクリプトで取得すると Optional
[https://twitter.com/ikkitang/status/1001838268143386625:embed#範囲型について。 範囲型には Range
範囲型にはリテラルは存在せず、それらは演算子 `..<`、`...` を用いる事で表現する。 #もくもく独書
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年5月30日
また範囲型のプレースホルダー型Boundは、Comparableプロトコル(比較可能)に準拠している必要がある。 #もくもく独書
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年5月30日
[https://twitter.com/ikkitang/status/1001840514788868097:embed#つぎは Optional
[https://twitter.com/ikkitang/status/1001840978347479041:embed#Optional
[https://twitter.com/ikkitang/status/1001841920790835200:embed#Optional
[https://twitter.com/ikkitang/status/1001842864999907328:embed#オプショナルバインディングは、代入式の右辺にOptional
??演算子は以下のような感じ。 #もくもく独書 pic.twitter.com/Qee3DxFz5F
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年5月30日
[https://twitter.com/ikkitang/status/1001844821420527616:embed#つぎに !演算子による強制アンラップについて。Wrapped型の値を強制的に取り出す事ができるが、Optional
ひとまず今日はこんなところかな。
— イルカ@JPUG & 岡山swift (@ikkitang) 2018年5月30日
まとめとしては、Swiftではコンパイル時に代入の可・不可を判定し不可の場合はコンパイルエラーとしてくれる。これにより、より安全性の高いコーディングをやっていける。 #もくもく独書
反省点
Optinalのところは急ぎ足になっちゃった。。
ここ一番大事だからしっかりおさえる。
Swift実践入門について
今はSwift4対応の改訂版出てるのでそっち読んだほうがいいよ。多分。
[改訂新版]Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plus)
- 作者: 石川洋資,西山勇世
- 出版社/メーカー: 技術評論社
- 発売日: 2018/01/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る