名もなき未知

エンジニアリングとか、日常とかそういうのをまとめる場所。アクセス解析のためGAを利用、Googleに情報を送信しています。商品紹介のためAmazonアフィリエイトを利用、Amazonに情報を送信しています。記事に関しては私が書いていない引用文を除いて自由にご利用ください。

底から学ぶswiftに参加してきました

初心者向けとは何だったのか。。 というくらい、参加者の質問が深く、興味津々なのだなあと感じました。

私もswiftは少しかじったことがある程度なので、多くのことに気が付きました。

勉強会URL

supporterzcolab.com

講師

edura様。言語系のラジオもやってるみたい。すごい。

https://twitter.com/eduraaa

スライド

さっき見たら公開されてましたので、リンク。

https://twitter.com/eduraaa/status/887640221273030656

底から学ぶ Swift by Yuka Ezura on Prezi

概要

先に結論

オブジェクト指向でありながらprotocol-oriented Programmingであるのが最大の特徴っぽい。 様々な機能が実現されているswiftですが、その拡張性の高さはprotocol-orientedであることに起因するのかもしれません。

これらを念頭に入れて、swift tourとかもう一回サラッと見てみようかなあ…。swift 4になってからチェックできていないので。あとはiOSチュートリアルもだなあああ。

はじめに的なやつ

  1. 言語を効率よく取得するにはどうすればいいか?
  2. (50点)チュートリアルとか細々とした機能を抑える。。。 <- これは忘れる。 (100点)その言語のコンセプト、文化を捉えながら実際に使う。文化、コンセプトはその言語の提供している機能にも繋がっていくので、理解が促進される。

要は、根本的なところを理解しないまま、表面の文法を理解してもダメって話ですね。

swiftのコンセプト、文化、特徴

まとめると、Safety, Freedomの2つ。

自分の中では、

  • Safetyはnil安全(Optional等)であったり、型推論がありながらも堅牢な型チェックが働くところ。
  • Freedomは自分で既存の機能に影響を与えず、拡張ができるところ(extention, protocol等)。

と捉えた。

実際のコード例で示してもらったけど、いきなりprotocolとかSequenceのプロトコルを継承していたりと、びっくり、コード例がわかりやすくて理解できたけど、オブジェクト指向をまず理解していないと難しいのかも?と感じた(幸い、私はJavaをしっかりやってきたので良かったけど…)

Genericsの話はあまり頭に入らなかったので、もっかいスライド見てこよ。。。

興味深い質問がここであり、protocolとは継承とどう使い方を分けるべきなのか、またinterfaceとの違いは何なのか。等、どう考えても初心者向けじゃないような質問が出ていて、初心者とは一体… という気持ちになった。

その質問と応答を聞きながら、protocolが継承よりもいいのは、親クラスからの影響を最小限に抑えられるところかな、と私は考えた。 あとは拡張性の強さ、である。継承を下手にしていると結局無限overrideなど、同じメソッドなのに違う機能が提供されかねないのではないか、と思うがprotocolで切り出すことにより、overrideと言うよりはその場で毎回実装しているような形を取ることでスッキリするような気がした。。。

実際にswiftほとんど書いたことがないので、よくわからないですけどね。。。

swift tourを読んで見る

ここでもCustomStringConvertibleで出力する文字列を変えたり、 &+ 演算子を使って、オーバーフローを起こしても動作するようにしたり、typealias を貼ってみたりと実践的だった。

特にCustomStringConvertibleとか、基本的なクラスでもprotocolで拡張をあっさり出来てしまうのは全く知らなかったので、ちょっとびっくり。 もっとprotocolを生かして実装していかなければいけないなと思いました。

まとめ

Swiftはオブジェクト指向で、関数型も若干取り入れていて、protocol orientedで、と抑えるべき概念が非常に広く、なかなか1日2日で取得できるような言語ではないので、少しづつ取り組んでいかないとなあと意識を新たにしました。。。。

これを早くやらないとなあと思いながら、XCodeに振り回されております。。。

developer.apple.com

時間を作って頑張ろう。。。