Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Swift - Pushing technology limits

Swift - Pushing technology limits

Why Swift is Awesome!!!

Konstantin

April 30, 2015
Tweet

More Decks by Konstantin

Other Decks in Programming

Transcript

  1. Programs must be written for people to read, and only

    incidentally for machines to execute 1 Harold Abelson
  2. .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
  3. 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; }
  4. !

  5. @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
  6. !

  7. 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 }
  8. !

  9. 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
  10. //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) }
  11. Features Reach 4 Functional Programming 4 OOP 4 Generic Purpose

    4 Value types 4 Tuples 4 Optionals 4 ...
  12. Safe 4 Types 4 Type casting 4 tUpos 4 Existing

    Methods 4 Correct instructions - Exception
  13. 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") }
  14. Optionals 4 Represent absence of a value 4 Safe Nil

    handling [NullPointerException] 4 Nil value for Value type, Int: 0, -1, NSnotFound, IntMax
  15. '?' 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
  16. Optionals Is a Box that could store a value inside

    or could be empty You can interact with the value only throw Box API
  17. 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") }
  18. 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)