2014年10月28日
Posted by 屋台ブルー at
2014年10月28日00:00 Comment(0)
Swiftで遊ぼう! - 109 - Swift Fundamentals本 クラス

Swiftは、関数型プログラミングのようにモダンなプログラミングができることで注目されていますが、今までのプログラミング法(OOP) あっての関数型プログラミングだという話を「オブジェクト指向でなぜつくるのか 第2版
まだこの本のクラスに関する説明を全部読んでいないけど、最初の説明として不十分じゃないかと感じた。メモリーを有効活用するために進化してきたOOPプログラミングの簡単な説明をしないと、なぜメモリーのアドレス値(またの名をポインター値、リファレンス値)を指定して値を扱う必要があるのか理解できないだろうね。必要な時だけ設計図にあたるクラスからインスタンス(実体の値)を生成して扱って、不必要になれば消去(デイニシャライズ)する意味がわからない。
この章の説明で、Dogクラスを例えに出している。普通クラスの説明をするとき、デフォルトイニシャライザーを使って、インスタンス生成時にパラメーターを与えない例えが多いけど、ここでは、クラスの生成の要になるイニシャライザーの説明をして、「init()」を使っているのはいいと思う。しかし、プロパティのネーミングは実際推奨されている方法と異なるのが残念てすね。理由は分かるんですけどね。
この本で説明しているクラス宣言の例文は以下の通りです。
class Dog {
var Name: String
var Breed: String
var Age: Int
init(name: String, breed: String, age: Int) {
Name = name
Breed = breed
Age = age
}
}
既にプログラミングの勉強をしている人は気づいていると思うけど、このクラス宣言はいただけませんよね。変数の名前の付け方が拙いんです。ちょっと勉強をした私ならこれが以下の通りになります。
class Dog {
var name: String
var breed: String
var age: Int
init(name: String, breed: String, age: Int) {
self.name = name
self.breed = breed
self.age = age
}
}
たぶん、この本の著者は「self.」の説明をするのが疎ましく感じたのかもしれません。しかし、実際のコーディングでは理解していないといけないので言及すべきじゃないでしょうか。
まあ、不満に感じながら章末の問題を解く。
Questions for Review - 復習のための質問
1. プログラムの安価でクラスで何ができますか?
a) 似たようなデータグループを安全な型宣言でまとめることができる
b) 実際に使用するオブジェクトの抽象モデルを作る
c) key-valueのペアを使って情報をリスト化する
d) メモリーから使っていない情報を除去する
2. 適切なクラス宣言は次のどれですか?
a) let myClass:class = {// class code block}
b) class myClass = {// class code block}
c) class myClass {// class code block}
d) class myClass() {// class code block}
また読書を混乱させる問題だろう。答えは(c)ではあるが、ネーミングが間違えている。本当の正解は、「class MyClass { // class code block} 」として、キャメルケースの最初の文字を大文字にするのがクラスのルールですよね。
3. クラスの中で「init()」は何をしますか?
a) クラスからインスタンス生成時にプロパティを初期化します
b) クラスが宣言されたときにプロパティを初期化します
c) クラスのすべてのプロパティをデフォルト値にリセットします
d) 可読性のために何もしない
これは当然(a)ですね。
4. クラスの中で宣言される関数は「メソッド」として知られている
a) 正しい
b) 間違い
これは(a)で正しいです。
今日はここまで。
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。