実践業務を爆速でこなすtipsとgenerics
-
Upload
daisuke-nagata -
Category
Software
-
view
243 -
download
0
Transcript of 実践業務を爆速でこなすtipsとgenerics
実践業務を爆速でこなすtipsとgenerics
iosにはプログラミングの概念で
プロトコル指考とオブジェクト指考がある
概念、思考??プロトコル指考
オブジェクト指考とは?
アプリケーションを構築する上で、方針、設計、具体的なコードのこと
そして今回紹介するgenericsは連想型のパラメーターを
使う関数
コードで紹介!!
func DddcountOne<T>(check:T)->T{
return check
}
Tがパラメーターです。その他の文字が?な方は、
ビギナーズ倶楽部でお伝えします。
なぜ型を指定しないパラメータなのか?
幾つかありますが、一つ目
暗黙の共有を避ける。
objective-cの時代は、知らず知らず、
インスタンスの共有をしてしまう場合があった
それはデットロックへの危機感
デットロックとは
デッドロックとは、特に計算機科学において、2つ以上のスレッドあるいはプロセスなどの処理単位が互いの処理終了を待ち、結果としてどの処理も先に進め
なくなってしまうことを言う。
対応には排他処理を実施。今回はSwiftのgenericsを説明するので、
排他処理コードは飛ばす。
必要な場合は自分で、そこ調べて。
ただし、排他制御←
この考えやどういうものか知っとく必要あります。
スレッド、同期処理、非同期処理などで電気のメモリの流れなどを考量して、
あらかじめ排他処理を実施する
同時共有するアプリケーションを作成する場合など、排他処理を実施してスレッドが同時に起
きた場合もindexやindexPathのデーターベースの整合性を保つ場合などに使用する概念で、今後そういった多数のスレッドを多様する機会が増えるので、、知っとく必要
あり。
スマフォじゃなくて、セマフォで調べると良いです。
スマフォじゃなくて、セマフォで調べると良いです。
もう一度話を戻します。
generics注力した理由は
オブジェクト指向にあります。
オブジェクト指向の作法は、クラス化だけど、
クラス化だと多重に継承ができない。
オブジェクト指向言語では、スーパークラスを
一つしか持つことができず、機能変更する場合など、
スーパークラスをあとから変更するのは、極めて困難だ。
オブジェクト指向
プログラミングに関するキーワード
オブジェクト
クラス
インスタンス(実体)
状態と振る舞い
カプセル化(隠蔽)
継承、委譲
インタフェース、抽象化
などなどありますが
このまま行くとオブジェクト指考の話になるので、一旦ストップしてまとめると
変数の参照設定weakやstrongなど
変数を使う場合の初期化設定alloc initwith〜などスーパークラス設定
後から変更が困難になる型関係が損失
ダウンキャストする必要な場合が起きる
今までのオブジェクト指向objective-cは
いろいろ対応するのが面倒だった。
genericsは
使用する方で、型を宣言すれば知らず、知らずのうちに
共有するようなことが起きない。
具体的なコードはリンク先にあります。Starを押してください。
https://github.com/daisukenagata/GenericsSample
よろしくお願いします。
class Sample1: NSObject {
//ジェネリックスを作成引数を1つ返す
func DddcountOne<T>(check:T)->T{
return check
}
}
//Buttonの継承
self.view.addSubview
(SampleUIView(frame:self.view.frame))
// あらゆる型に変換するジェネリックス ラベルを一つ返す
print("1111",Sample1().DddcountOne(check:"111"))
print("222",Sample1().DddcountOne(check:222))
print("333",Sample1().DddcountOne(check:1.0))
print("444",Sample1().DddcountOne(check:true))
使う側で選ぶgenericsを使用する場合に
必要なプロトコル指考とは
関数型プログラミングがヒントになります。
こちらに関数プログラミング紹介があります。
http://www.slideshare.net/DaisukeNagata1/sansan-65191797
関数型プログラミングは複数の式を関数の適用によって組み合わせて
いくプログラミングスタイルである
また
プロトコル思考って?
プロトコル思考、Swiftではプロトコルや構造体は初期化の負担がなくモデ
ルにデータを強制しない開発者が採用した場合に
使用箇所が明示的で明確です。
これは僕のイメージですが、プログラムメソッドとプログラムメソッドを接続する場合で開発者が明確に採択できメモリの管
理などSwiftがよしなにやってくれる。
generics
//Associatedtypプロトコル 設定
protocol ProtocolBoard {associatedtype protocolPiecestatic var rows: Int { get }static var columns: Int { get }//取得用サブスクリプト
subscript(row: Int, column: Int) -> protocolPiece? { get set }}
//配列設定
struct ArrayBoard<T>: ProtocolBoard {static var rows: Int { return 7 }static var columns: Int { return 7 }// 配列
var board = [T?](repeating: nil, count: 7 * 7)// 取得用サブスクリプト
subscript(row: Int, column: Int) -> T? {get {
return board[row * 7 + column]}set {
board[row * 7 + column] = newValue}
}}
//Associatedtyp プロトコル 設定
var board = ArrayBoard<Bool>()board[3, 3] = trueboard[3, 4] = falseprint(board[3, 3]!)print(board[3, 4]!)
先ほどの<T>がパラメータ
なのでStringにもできます。
var board = ArrayBoard<Bool>()
//先ほどのBoolをStringにしました。
var board = ArrayBoard<String>()board[3, 3] = "もう一回"board[3, 4] = "当たり"print(board[3, 3]!)print(board[3, 4]!)
具体的なコードはリンク先にあります。Starを押してください。
https://github.com/daisukenagata/GenericsSample
よろしくお願いします。
Swiftの場合は開発者側でコードの型を選び、
使用したら解放される。
objective-cの場合はコードのメモリの解放なども開発者が自分で設定しなくてはいけない。
個人的にはgenericsを使うと引数や戻り値をよく考えるので
プログラミングを学ぶ上でも勉強になると思います。
永田大祐フリーランスios歴1.5年週7日実施(少し他言語も)1日12時間〜20時間実施
今までの活動
登壇させていただきました。青葉台 カジュアルSwift勉強会様
Swift愛好会様ios馬場様
フリースタイルPort もくもく会様Realm Meet Up 様
AKIBA.swift 様第2回RxSwift勉強会 @ Sansan 様
iosエンジニアニュースアプリ ReacticeCocoa Realm 使用相続税アプリ CoreData使用SDK Realmを使用漫画アプリ Obcセキュリティアプリ Obcカメラアプリ Obc
Androidアキパス
仕事を手に入れるためにiosアプリ
Androidアプリがこちら
で
実践業務を爆速でこなすtips
Swift案件はgenericsが多用しています。
class priceRide {
var price = 1
func addPrice(_ price:Int){
self.price += price
}
}
class subRide:priceRide {
var page = 1
}
func addPrice<T:priceRide>(_ data:T) -> T {
data.addPrice(13)
return data
}
genericsが読めないと自分がデットロックします。
1.コードを読めるようになる。
読めるようになるにはオブジェクト指向とプロトコル指向を学ぶ
2.読むためのMac操作を覚える
⌘+B = build⌘+Shift + k = clean⌘+R = run ⌘+C = copy⌘+V = past
⌘+Z = 戻る⌘+Shift + Z = 進むXcode内⌘+Ctr +→= クラスファイルを進む⌘+Ctr +←= クラスファイルを戻る⌘+A = Xcodeすべて選択⌘+I = インテント整形
Xcode内⌘+Shift + F = キワード検索⌘+Shift + O = クラス検索
メソッドを選択して⌘+トラックパッドを押す = スーパクラスに辿れる。
option + トラックパッドを押すパラメーターの紹介
Mac内⌘+Shift +F4 =スクリーンショット
トラックパット3本指で横にスワイプ=画面移動トラックパット3本指で縦にスワイプ=画面の縮小
もっとありますが自然とこういう操作ができるようになること
3.モックとなるコードを記録する。サイトを用意しておく
githubbitbucketswift docs
http://blog.personal-factory.com/tag/swift/リブレoffice
スプレッドシートgoogleのメモ帳などなど
4.はまった点など記録する
5.会話をアンラップしない
大人は知らず知らず会話をgenericsのようなパラメーター
にして抽象化します。
これはビジネスだとスピードが減速する原因と思います。
いかに率直に伝えれるかがキーポイント
率直になるほど、アンラップしていないので
それを補うために態度や行動で言語の
率直さをリカバリーします。
まとめると
単刀直入にしゃべり態度では気を使う
この比率を場合で調整する。
そうすることにより、言語が直接的なほどに意味が限定的になり
判断をする思考回路が短くなり
結果として作業のスピードが早くなります。
覚悟と情熱、ビジョンがある方この方針をお勧めします。
Swiftビギナーズ倶楽部 #swiftbg | Doorkeeper 様
コワーキングスペース茅場町 Co-Edo 様
登壇ありがとうございます。