トップ «前の日記(2016-02-11) 最新 次の日記(2016-02-20)» 編集

日々の破片

著作一覧

2016-02-16

_ Swiftデザインパターン

結論としてはモダンなデザインパターン本で、今となってはGoFより遥かに良いのだが、難点もある。

翔泳社の野村さんからSwiftデザインパターンをいただいたので、よしこれでSwiftを覚えようかと思った(のがクリスマス休暇だからもう2か月前になってしまった)が、読みはじめるとどうも勝手が微妙に違う。

翻訳本なのだが、筆者がデザインパターンマスター(普通にデザインパターンを適用して機能を実装にプログラミングできる人の意味。自称で十分なので、実はおれもそうなのだ)らしく、そういう人は実装用のプログラミング言語はそれほど問題とはしないので、Swiftが発表されてすぐに執筆出版したものらしくXcodeは6だしSwiftも1.xだ(コード標準も自分の律にしたがっているように思う)。

筆者は引退した元銀行のCTOだとか書いてあるが、考慮している現実的な問題を読む限り、パフォーマンス(時間だけではなく空間についても)、並列性、修正可能性などについての目配りがきちんとしているので、その点について納得感がある。

というわけで、Swiftの勉強ついでに読むというのには向かなくなっているのだが、デザインパターン本としては整理されていて良い。コードもSwiftという十二分にモダンな言語で書かれているので、デザインパターンの実装例としての疑似コードという読み方をしても問題がない。

それでいて筆者はちゃんとSwiftを動かしながら執筆したらしく、たとえばシングルトンパターンでは、Swfit固有(今もそうかはおれは知らない)の問題としてクラスオブジェクトが利用できないことによって(ちょっと、ここはおれには疑問があって、この筆者はJavaやC#でシングルトンパターンを適用するときはstaticを利用するのをイディオムとしているが、それだとシングルトンの仮想化ができない(リフレクションで名前ベースでやればできるが少しも嬉しくない)ので賛成できない。というかファクトリメソッドパターンが返すオブジェクトがシングルトンというパターンを想定しないのか?)ネストした構造体を返すファクトリーメソッドという方法論を示している(このときに、この構造体が仮想化されていればおれが()で書いたことが実現できるので結果としては良いことを書いていると思う)。さらに並列処理でシングルトンを利用する場合の考慮点など、実用化するときに必要な考慮点についていろいろ考察したり実装を示したり、わかっている感が強い。GCDというのはここを読んでいて初めてどういうものかわかった。

何しろ、一番ページが割かれているのがObject Poolパターン(シングルトンのバリエーションとして書いているからシングルトンの一部と考えると、実に1/10以上がシングルトン回りということになる)という耳慣れないパターン(Flyweightは別にあるから、Flyweightとは異なるパターンと筆者が考えているのは間違いない)で、直接は書いていないが、口座処理が念頭にありそうだ。

というわけで、Swiftの勉強の役にはあまり立たないだろうが、デザインパターンの本としては、並列(トランザクション処理を想定すれば並列になるだろうが、オブジェクトの保護という観点からは並行であっても同じことだ)処理に対する強い考慮と、パフォーマンスへの考慮(本人がどこまで意識しているかは知らないが、iOSのことを考えればとても重要だ)など、良い点が多い。

SwiftとXcodeが1世代前という難点はあるが、モダンなデザインパターンの本としては良い本だ。

というわけで、2010年代に書かれたデザインパターンの本として推薦できる。

Swiftデザインパターン(アダム・フリーマン)

(追記:2016/2/19現在Kindle版は半額になっている)

アマゾン評ではSwiftが1.xだということだけを理由に★1個にしている(こういう極端な評を書く人の例にもれず「2.x対応版が出るまで待った方が」どうたらとか書いているが、もちろん、こういう評を読めば買わない人も出てくるし、売れない本を改定して元が取れることはあり得ないので当然2.x対応版など出るはずがあり得ないのだが、どうしてそういうことを書くのか不思議なことである)ものだけが出ているのが内容が良いだけにもったいない感じだ。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|

ジェズイットを見習え