Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Swift - Pushing technology limits
Search
Konstantin
April 30, 2015
Programming
1
210
Swift - Pushing technology limits
Why Swift is Awesome!!!
Konstantin
April 30, 2015
Tweet
Share
More Decks by Konstantin
See All by Konstantin
How does complier see your app
konstantinkoval
4
120
Swift Package Manager
konstantinkoval
2
160
Swift rEvolution
konstantinkoval
1
230
Refactoring an Ugly Objective-C with Swift
konstantinkoval
0
210
React Native - from a mobile (iOS) developer prospective
konstantinkoval
0
61
WatchKit
konstantinkoval
0
57
Intro in WatchKit and Watch apps
konstantinkoval
0
49
Functional Swift
konstantinkoval
1
130
I love swift.pdf
konstantinkoval
1
180
Other Decks in Programming
See All in Programming
Patched fetch did not work
quramy
4
400
サーバーレスで負荷試験!Step Functions + Lambdaを使ったk6の分散実行
shuntakahashi
6
1.6k
メモリ最適化を究める!iOSアプリ開発における5つの重要なポイント
yhirakawa333
0
420
いつか使える ObjectSpace / Maybe useful ObjectSpace
euglena1215
2
140
はじめてみよう量子プログラミング
itokoichi01
0
220
GraphQLとGigaViewer for Apps
numeroanddev
2
110
rbs-inlineを導入してYARDからRBSに移行する
euglena1215
1
290
今インフラ技術をイチから学び直すなら
yuhta28
1
140
The Sequel to a Dream of Ruby Parser's Grammar
ydah
1
220
Perl 5 OOP機構30年史 - Perl 5's OOP Mechanism over the past 30 years
moznion
0
370
Rubyのobject_id
qnighy
6
1.3k
エンジニア1年目で複雑なコードの改善に取り組んだ話
mtnmr
3
2k
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
78
8.6k
Art, The Web, and Tiny UX
lynnandtonic
294
20k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
Practical Orchestrator
shlominoach
185
10k
[RailsConf 2023] Rails as a piece of cake
palkan
48
4.6k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.4k
Done Done
chrislema
180
16k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
29
2.6k
Web Components: a chance to create the future
zenorocha
309
42k
The Pragmatic Product Professional
lauravandoore
31
6.2k
The Cult of Friendly URLs
andyhume
76
6k
Clear Off the Table
cherdarchuk
91
320k
Transcript
Kostiantyn Koval 1 Rocketfarm.no
Swift - Pushing technology limits
How should look Modern Language?
Clean and Clear
Programs must be written for people to read, and only
incidentally for machines to execute 1 Harold Abelson
.global _start .text _start: # write(1, message, 13) mov $1,
%rax mov $1, %rdi mov $message, %rsi mov $13, %rdx syscall message: .ascii "Hello, world\n" mov rax, 1 mov rdi, 1 mov rsi, message mov rdx, 13 syscall
None
int compare(const void * a, const void * b) {
if ( *(uint32_t*)a < *(uint32_t*)b ) { return -1; } if ( *(uint32_t*)a > *(uint32_t*)b ) { return 1; } return 0; }
!
@interface Person : NSObject @property (nonatomic) NSString* name; @property (nonatomic)
NSInteger age; @end @implementation Person - (instancetype)initWith:(NSString *)name age:(NSInteger)age { self = [super init]; if (self) return nil; _name = name; _age = age; return self; } @end @implementation TestPerson - (void)test { NSArray *people = @[ [[Person alloc] initWith:@"Sam" age:10], [[Person alloc] initWith:@"Sara" age:24], [[Person alloc] initWith:@"Ola" age:42], [[Person alloc] initWith:@"Jon" age:19]]; NSArray *kids = [people filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"age < 18"]]; NSMutableArray *names = [NSMutableArray new]; for (Person *person in people) { [names addObject:person.name.lowercaseString]; } } @end
!
struct Person { let name: String let age: Int }
let people = [ Person(name: "Sam", age: 10), Person(name: "Sara", age: 24), Person(name: "Ola", age: 42), Person(name: "Jon", age: 19)] let kids = people.filter { person in person.age < 18 } let names = people.map { $0.name.lowercaseString }
!
60% Less Code 13 Lines Vs 34 Lines
Less Code Less Bugs Less money
Type inference var age = 19 var name = "Sara"
var isEmpty = name.isEmpty VS var age: Int = 19 var name: String = "Sara" var isEmpty: Bool = name.isEmpty
No Semicolons ; var age = 19
Other 4 Closures 4 Default initializers 4 Default parameters 4
Subscripts 4 Operators
//Closures let numbers = [1, 2, 3, 4] numbers.map {$0
+ 10} // Subscripts let num2 = numbers[2] //Operators infix operator <<< { } func <<< (a: Vector, b: Vector) -> Vector { return Vector(x: a.x + b.x, y: a.y + b.y) }
Smart
Features Rich
Features Reach 4 Functional Programming 4 OOP 4 Generic Purpose
4 Value types 4 Tuples 4 Optionals 4 ...
Safe
Safe 4 Types 4 Type casting 4 tUpos 4 Existing
Methods 4 Correct instructions - Exception
None
Error Handling func readFromFile(file: String) -> (result: String?, error: NSError?)
{ return ("file Content", nil) } let result = readFromFile("file.txt") if result.error != nil { println("handle error") }
Optionals
Optionals 4 Represent absence of a value 4 Safe Nil
handling [NullPointerException] 4 Nil value for Value type, Int: 0, -1, NSnotFound, IntMax
'?' Type String != String? Int != Int? func person(name:
String) -> Person func person(name: String, age: Int?) -> Person person("Elvis", age: nil) person(nil, age: 27) //Error
Optionals Is a Box that could store a value inside
or could be empty You can interact with the value only throw Box API
Safe var person: Person? = people.find("Elvis") // 1 - Unwrapping
`!` if person != nil { println("found \(person!)") } //2 - Optional binding if let person = person { println("found \(person)") } else { println("found found") }
Multithreading
Multithreading 4 Immutable value type 4 explicit 'self' capturing processAsync(var
people: [Peope]) -> [Peope] { // ... Run Async people.remove(...) return people } var people: [People] //Async code processAsync(people) processAsync(people) processAsync(people)
Fast
Fast 18 Times > Objetive-C 2,9 Times > C
Let's make better mistakes tomorrow
Thanks! QA?? ! Twitter - @KostiaKoval GitHub - /KostiaKoval Kostiantyn
Koval - Rocketfarm.no