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

Python e swift: linguaggi a confronto

Python e swift: linguaggi a confronto

Quando Apple decise di affiancare all’objective C un altro linguaggio per consentire lo sviluppo di app sulla piattaforma iOS, moltissime voci di corridoio davano python per essere stato scelto per questo.

Come sappiamo alla fine non è andata così, ma è stato creato un linguaggio totalmente nuovo: Swift.

In questo talk andremo a scoprire affinità e differenze tra python e swift.

Lelio Campanile

April 09, 2017
Tweet

More Decks by Lelio Campanile

Other Decks in Programming

Transcript

  1. CHI SONO? LELIO CAMPANILE WORK AT UNICAMPANIA.IT (EX UNINA2) TEACHER

    AT APPLE FOUNDATION COURSE FOR UNICAMPANIA FOLLOW ME ON TWITTER: @LELIOC [email protected] WWW.LELIOCAMPANILE.IT Lelio Campanile per Pycon Otto @lelioc [email protected]
  2. PERCHÉ SWIFT? > serviva un linguaggio più sempice e più

    moderno di objective-c > abbassare la soglia di apprendimento per i nuovi programmatori > compatibilità con le librerie esistenti in objective-c > usa lo stesso compilatore di objective-c (LLVM in xcode) Lelio Campanile per Pycon Otto @lelioc [email protected]
  3. LA NASCITA DI SWIFT > inizio sviluppo nel 2010 >

    viene presentato al WWDC 2014 (giugno 2014) > 15 settembre 2014 viene rilasciato Swift 1.0 con Xcode 6 > swift 2.0 viene annunciato al WWDC 2015 > 15 settembre 2015 viene rilasciato swift 2.0 con Xcode 7 > swift 3.0 viene presentato al WWDC 2016 Lelio Campanile per Pycon Otto @lelioc [email protected]
  4. SWIFT E L'OPEN SOURCE > Apple al WWDC 2015 dichiara

    che swift sarà open source > 3 dicembre del 2015 swift è Open source > licenza Apache 2.0 > www.swift.org > sorgenti su github https://github.com/ apple/swift Lelio Campanile per Pycon Otto @lelioc [email protected]
  5. UN PICCOLO VIAGGIO NELLA SINTASSI swift è riuscito ad abbandonare

    l'obbligo del punto e virgole alla fine delle istruzioni, che è opzionale. Per le {} ancora non ci siamo! Lelio Campanile per Pycon Otto @lelioc [email protected]
  6. I COMMENTI // Commenti singola linea /* Commenti su più

    linee in stile C */ # Python commenti singola linea Lelio Campanile per Pycon Otto @lelioc [email protected]
  7. LE VARIABILI: PYTHON WAY... > python è un linguaggio fortemente,

    ma dinamicamente tipizzato > non è necessario dichiarare espicitamente i tipi > tutto, anche i tipi base sono oggetti! > Non esistono le costanti nome = "lelio" x = 10 nome = 20 Lelio Campanile per Pycon Otto @lelioc [email protected]
  8. ... SWIFT SIDE > swift è fortemente tipizzato > tutte

    le variabili devono essere dichiarate prima di essere utilizzate > il compilatore è in grado di "indovinare" il tipo che si assegna alla variabile var nome = "lelio" // tipo "indovinato dal compilatore" var altronome: String = "lorenzo" // tipo dichiarato esplicitamente var x: Int = 10 let costante: Int = 20 Lelio Campanile per Pycon Otto @lelioc [email protected]
  9. TYPE INFERENCE PYTHON nome = "lelio" nome = 12 #funziona!!

    # in python viene creato l'oggetto "lelio" o 12 e # poi asseganto alla variabile Lelio Campanile per Pycon Otto @lelioc [email protected]
  10. TYPE INFERENCE SWIFT var nome = "lelio" var nome =

    10 // errore!!! // swift è fortemente e staticamente tipizzato Lelio Campanile per Pycon Otto @lelioc [email protected]
  11. LA GESTIONE DELLA MEMORIA > Sia swift che python hanno

    la gestione automatica della memora > Si occupano da soli di allocare e deallocare la memoria > Usano entrambi il reference counting (ARC Automatic Reference Counting) Lelio Campanile per Pycon Otto @lelioc [email protected]
  12. REFERENCE COUNTING > il gestore della memoria aumenta un contatore

    ogni volta che un oggetto viene referenziato > quando uno oggetto viene dereferenziato il contatore viene decrementato > quando il contatore è a 0 si è sicuri che non c'è nessun riferimento e l'oggetto può essere cancellato Lelio Campanile per Pycon Otto @lelioc [email protected]
  13. REFERENCE CYCLE Quindi con il reference counting è tutto rose

    e fiori?? NO, OVVIAMENTE Il problema si chiama reference cycle: non c'è nessun riferimento ad un oggetto, ma il suo contatore non è 0 Lelio Campanile per Pycon Otto @lelioc [email protected]
  14. IN PYTHON ESISTE IL GARBAGE COLLECTOR # Esempio di reference

    cycle def reference_cycle(): a = [] a.append(a) reference_cycle() Il garbage collector viene invocato quando il numero di allocazioni in memoria - il numero di deallocazione è minore di un valore soglia Lelio Campanile per Pycon Otto @lelioc [email protected]
  15. ARRAY (OVVERO LISTE) # python numeri = [1,21,22,71] foo =

    [1,2, True, "ciao", "array"] foo[0] # 1 # possono essere eterogenee // swift var numeri = [1,21,22,71] // int array var frutta = ["pere", "arancie", "mele"] // string array // devono essere omogenee frutta[0] // pere Lelio Campanile per Pycon Otto @lelioc [email protected]
  16. DIZIONARI # Python d = dict(nome = "lelio", sesso =

    "M") d = {"nome": "lelio", "sesso" = "M"} nome = d["nome"] d["prov"] = "Napoli" # aggiungi un elemento del d["prov"] #rimuove un elemento // Swift var dict = Dictionary<String, String>() var d = ["nome": "lelio", "sesso": "M"] var nome = d2["nome"] d2["prov"] = "Napoli" // aggiunge un elemento d2.removeValue(forKey: "prov") // rimuove un elemento Lelio Campanile per Pycon Otto @lelioc [email protected]
  17. CICLI # Python for n in numeri: print(n) // Swift

    for n in numeri{ print(n) } SI ASSOMIGLIANO, VERO? Lelio Campanile per Pycon Otto @lelioc [email protected]
  18. CONDIZIONI # Python x = 10 y = 5 if

    x > y: print("x è il valore maggiore") elif x == y: print("x e y sono uguali") else: print("y è il valore maggiore") Lelio Campanile per Pycon Otto @lelioc [email protected]
  19. CONDIZIONI //Swift var x = 10 var y = 5

    if x > y { print("x è il valore maggiore") } else if x == y { print("x e y sono uguali") } else { print("y è il valore maggiore") } Lelio Campanile per Pycon Otto @lelioc [email protected]
  20. LIST COMPREHENSIONS QUALCOSA DI PIÙ COMPLICATO... # Python q =

    [] for x in range(10): q.append(x**2) q = [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] q2 = [x**2 for x in range(10)] q2 = [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] Lelio Campanile per Pycon Otto @lelioc [email protected]
  21. LIST COMPREHENSIONS // Swift var q = [Int]() for x

    in 0..<10 { q.append(x*x) } q = [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] var values = Array(0..<10) let q2 = values.map {$0 * $0} q2 = [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] Lelio Campanile per Pycon Otto @lelioc [email protected]
  22. ...E LE PERFORMANCE In python: python -m timeit -s "q

    = [x**2 for x in range(10)]" 0.0161 usec per loop python -m timeit -s "q = []" "for x in range(10):" " q.append(x**2)" 1.69 usec per loop In swift: sono equivalenti Lelio Campanile per Pycon Otto @lelioc [email protected]
  23. LE FUNZIONI # Python def ciao(persona): salutiamo = "Ciao "

    + persona return salutiamo print(ciao("lelio")) # Ciao lelio // Swift func ciao(persona: String) -> String { let salutiamo = "ciao " + persona return salutiamo } print(ciao(persona: "lelio")) // ciao lelio Lelio Campanile per Pycon Otto @lelioc [email protected]
  24. CLASSI # Python class Esempio: def __init__(self,a ,b): self.a =

    a self.b = b e = Esempio(1, 2) print(e.a) # 1 print(e.b) # 2 Lelio Campanile per Pycon Otto @lelioc [email protected]
  25. CLASSI // Swift class Esempio { var a = 0

    var b = 0 init(_ a: Int, _ b: Int) { self.a = a self.b = b } } let e = Esempio(1, 2) print(e.a) // 1 print(e.b) // 2 Lelio Campanile per Pycon Otto @lelioc [email protected]
  26. LE CLASSI E LE STRUCT IN SWIFT in swift oltre

    le classi esistono (e sono anche molto utilizzate) le struct Cosa sono le struct?? Sono un modo di defnire un tipo di dato! In pratica le classi e le struct si somigliano molto, si definiscono molto similmente, entrambi possono avere metodi ed attributi... In cosa differiscono: 1. le scruct non supportano l'ereditarietà 2. le struct sono sempre passate per valore 3. le classi sono sempre passate per riferimento Lelio Campanile per Pycon Otto @lelioc [email protected]