Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

底から学ぶ Swift

No description
by

Yuka Ezura

on 19 July 2017

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of 底から学ぶ Swift

MyType().map { (element: String) -> in
// String + Int
return element + 1
}
for
element
in
      {
print(element)
}
Swift
プログラミングって
なんだろう…?
静的型付け
コンパイル時に型が決まる
底から学ぶ Swift
繪面 友香
iOS エンジニア @ LINE
twitter: ezura (@eduraaa)
ラジオ:
熊谷と繪面がプログラミングコードの内から聴こえてくる声に耳を傾けて楽しむラジオ
http://mookmookradio.com/a0005/
どう動くか
関係性はどうか
状態の変化は
性質は

プログラミング言語を用いて表現
使用する言語によって設計が変わる
なぜ?
言語の提供する機能の違い?
言語の
コンセプト・文化
の違い
コンセプト・文化
に基づいて
機能が設計・実装されている
こういう機能がある
こういう機能がある
こういう機能がある
根本を学びたい
お願い・諸注意
みんなで学ぶことを目的としています。
随時質問してください :)
Swift4 前提
Safety
Freedom
文脈の整合性が
とれる
interface の保証
型安全
null safety
Optional:
"nil であり得るか否か" を表現
型推論
型による安全性を確保しながら
スクリプト言語のように簡潔に書ける
コンパイラが型を文脈から推論
multi-paradigm
Generics
型を抽象化して扱う
Object-oriented programming
Protocol-oriented programming
Functional programming
index
前半
Swift はどんな言語?
Swift の文化に触れてみよう
休憩 (5~10 分)
後半
A Swift tour
Check for overflow
Check for out-of-bounds
Check initialized
Cover all conditions
...
let
array = [
0
,
1
,
2
]

for
element
in

array
{
print(element)
}
let
range =
0
...
2

for
element
in

range
{
print(element)
}
for
element
in

MyType
() {
print(element)
}
struct
MyType {}
for element in MyType() {
print(element)
}
struct MyType {}

extension MyType: Sequence {
func makeIterator() -> AnyIterator<String> {
// return "0", "1", "2"

var count = 0
return AnyIterator {
defer { count += 1 }
return count < 3 ? String(count) : nil
}
}
}
/*
extension Sequence where Self == Self.Iterator {
public func makeIterator() -> Self
}るため、下記でも実装できる
*/

struct _MyType {}
extension _MyType: Sequence {}
extension _MyType: IteratorProtocol {
mutating func next() -> String? {
return /* something */
}
}
for element in MyType() {
print(element)
}
struct MyType {}
extension MyType: Sequence { /* ... */ }
MyType().map
MyType().forEach
MyType().filter
MyType().lazy
...
MyType().map { $0 in $0 + 1 }
struct MyType {}
extension MyType: Sequence { /* ... */ }
error:
Binary operator '+' cannot be applied to operands of type 'Int' and 'String'
func makeIterator() -> AnyIterator<String> {
// return "0", "1", "2"

var count = 0
return AnyIterator {
defer { count += 1 }
return count < 3 ? String(count) : nil
}
}
失念していましたが、
私たちは、静的型付け言語を書いています
and you
Swift 歴
言語歴

nil チェックを強要
struct MyType {}

MyType().map { ... }
compile error: method missing
array.map { $0 + 1 }
compile error: type mismatch
let array = ["0", "1", "2"]
底から学ぶ Swift
2017/7/19
ezura
文字列を扱う文脈上で、
数値として扱おうとしている
string.uppercased()
compile error
let string:
String?
= nil
nil でありうる前提(の文脈上)で、
nil ではありえない前提で扱おうとしている
string.uppercased()
let string:
String
= ""
nil でありえない文脈を表現できる
let numbers = array.filter { $0 < 100 }
.map { $0.description }
`$0` is `String`
`$0` is `Int`
return `String`
`numbers` is `[String]`
Protocol
抽象化された概念の記述
持つべき機能
普遍的な性質
要素を順番に取り出せれば良い?
Full transcript