SlideShare a Scribd company logo
1 of 35
Download to read offline
PYTHON E
SWIFT
LINGUAGGI
A
CONFRONTO
Lelio Campanile per Pycon Otto @lelioc
lelio.campanile@gmail.com
CHI SONO?LELIO CAMPANILE
WORK AT UNICAMPANIA.IT (EX UNINA2)
TEACHER AT APPLE FOUNDATION COURSE FOR UNICAMPANIA
FOLLOW ME ON TWITTER: @LELIOC
LELIO.CAMPANILE@GMAIL.COM
WWW.LELIOCAMPANILE.IT
Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
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 lelio.campanile@gmail.com
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 lelio.campanile@gmail.com
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 lelio.campanile@gmail.com
PYTHON VS SWIFT
Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
GOOGLE È TUO
AMICO!
Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
SE CERCHI PYTHON E
SEI FORTUNATO !
Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
SE CERCHI SWIFT E
SEI FORTUNATO !
Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
SWIFT È COMPILATO
GENERA FILE
ESEGUIBILI
ESATTAMENTE COME
OBJECTIVE-CLelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
PYTHON È PSEUDO-
COMPILATO
GENERA UN
BYTECODE .PYC
Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
LE PERFORMANCE??
Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
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 lelio.campanile@gmail.com
I COMMENTI
// Commenti singola linea
/* Commenti su più linee
in stile C
*/
# Python commenti singola linea
Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
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 lelio.campanile@gmail.com
... 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 lelio.campanile@gmail.com
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 lelio.campanile@gmail.com
TYPE INFERENCE
SWIFT
var nome = "lelio"
var nome = 10 // errore!!!
// swift è fortemente e staticamente tipizzato
Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
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 lelio.campanile@gmail.com
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 lelio.campanile@gmail.com
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 lelio.campanile@gmail.com
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 lelio.campanile@gmail.com
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 lelio.campanile@gmail.com
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 lelio.campanile@gmail.com
CICLI
# Python
for n in numeri:
print(n)
// Swift
for n in numeri{
print(n)
}
SI ASSOMIGLIANO, VERO?
Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
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 lelio.campanile@gmail.com
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 lelio.campanile@gmail.com
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 lelio.campanile@gmail.com
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 lelio.campanile@gmail.com
...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 lelio.campanile@gmail.com
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 lelio.campanile@gmail.com
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 lelio.campanile@gmail.com
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 lelio.campanile@gmail.com
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 lelio.campanile@gmail.com
PERCHÉ??
PROTOCOL ORIENTED
PROGRAMMING
HTTPS://
DEVELOPER.APPLE.COM/
VIDEOS/PLAY/
WWDC2015/408/
Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com

More Related Content

Similar to Pycon 8 python e swift

Aspettando Go.2 - Meetup golang milano - 27 settembre 2018
Aspettando Go.2 - Meetup golang milano - 27 settembre 2018Aspettando Go.2 - Meetup golang milano - 27 settembre 2018
Aspettando Go.2 - Meetup golang milano - 27 settembre 2018r3vit
 
Realizzare applicazioni desktop con Electron e Angular
Realizzare applicazioni desktop con Electron e AngularRealizzare applicazioni desktop con Electron e Angular
Realizzare applicazioni desktop con Electron e AngularMichele Aponte
 
Qt 4.5.3 con Visual C++ Express 2008 (edizione gratuita!)
Qt 4.5.3 con Visual C++ Express 2008 (edizione gratuita!)Qt 4.5.3 con Visual C++ Express 2008 (edizione gratuita!)
Qt 4.5.3 con Visual C++ Express 2008 (edizione gratuita!)Paolo Sereno
 
Pycrashcourse3.0
Pycrashcourse3.0Pycrashcourse3.0
Pycrashcourse3.0rik0
 
Sviluppo Di Applicazioni Su I Os
Sviluppo Di Applicazioni Su I OsSviluppo Di Applicazioni Su I Os
Sviluppo Di Applicazioni Su I OsNoDelay Software
 
Pycrashcourse3.1
Pycrashcourse3.1Pycrashcourse3.1
Pycrashcourse3.1rik0
 
FROM A TO C(HECK-IN): iOS e Swift Lab
FROM A TO C(HECK-IN): iOS e Swift LabFROM A TO C(HECK-IN): iOS e Swift Lab
FROM A TO C(HECK-IN): iOS e Swift LabPaolo Musolino
 
Functional Programming in Java - Le Espressioni Lambda
Functional Programming in Java - Le Espressioni LambdaFunctional Programming in Java - Le Espressioni Lambda
Functional Programming in Java - Le Espressioni LambdaEzio Sperduto, PhD
 
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015Codemotion
 
Realizzare applicazioni desktop con Electron e Angular
Realizzare applicazioni desktop con Electron e AngularRealizzare applicazioni desktop con Electron e Angular
Realizzare applicazioni desktop con Electron e AngularMichele Aponte
 
Michele Aponte - Realizzare Applicazioni desktop con Electron e Angular - Cod...
Michele Aponte - Realizzare Applicazioni desktop con Electron e Angular - Cod...Michele Aponte - Realizzare Applicazioni desktop con Electron e Angular - Cod...
Michele Aponte - Realizzare Applicazioni desktop con Electron e Angular - Cod...Codemotion
 

Similar to Pycon 8 python e swift (12)

Vb.Net
Vb.NetVb.Net
Vb.Net
 
Aspettando Go.2 - Meetup golang milano - 27 settembre 2018
Aspettando Go.2 - Meetup golang milano - 27 settembre 2018Aspettando Go.2 - Meetup golang milano - 27 settembre 2018
Aspettando Go.2 - Meetup golang milano - 27 settembre 2018
 
Realizzare applicazioni desktop con Electron e Angular
Realizzare applicazioni desktop con Electron e AngularRealizzare applicazioni desktop con Electron e Angular
Realizzare applicazioni desktop con Electron e Angular
 
Qt 4.5.3 con Visual C++ Express 2008 (edizione gratuita!)
Qt 4.5.3 con Visual C++ Express 2008 (edizione gratuita!)Qt 4.5.3 con Visual C++ Express 2008 (edizione gratuita!)
Qt 4.5.3 con Visual C++ Express 2008 (edizione gratuita!)
 
Pycrashcourse3.0
Pycrashcourse3.0Pycrashcourse3.0
Pycrashcourse3.0
 
Sviluppo Di Applicazioni Su I Os
Sviluppo Di Applicazioni Su I OsSviluppo Di Applicazioni Su I Os
Sviluppo Di Applicazioni Su I Os
 
Pycrashcourse3.1
Pycrashcourse3.1Pycrashcourse3.1
Pycrashcourse3.1
 
FROM A TO C(HECK-IN): iOS e Swift Lab
FROM A TO C(HECK-IN): iOS e Swift LabFROM A TO C(HECK-IN): iOS e Swift Lab
FROM A TO C(HECK-IN): iOS e Swift Lab
 
Functional Programming in Java - Le Espressioni Lambda
Functional Programming in Java - Le Espressioni LambdaFunctional Programming in Java - Le Espressioni Lambda
Functional Programming in Java - Le Espressioni Lambda
 
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
 
Realizzare applicazioni desktop con Electron e Angular
Realizzare applicazioni desktop con Electron e AngularRealizzare applicazioni desktop con Electron e Angular
Realizzare applicazioni desktop con Electron e Angular
 
Michele Aponte - Realizzare Applicazioni desktop con Electron e Angular - Cod...
Michele Aponte - Realizzare Applicazioni desktop con Electron e Angular - Cod...Michele Aponte - Realizzare Applicazioni desktop con Electron e Angular - Cod...
Michele Aponte - Realizzare Applicazioni desktop con Electron e Angular - Cod...
 

Pycon 8 python e swift

  • 1. PYTHON E SWIFT LINGUAGGI A CONFRONTO Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
  • 2. CHI SONO?LELIO CAMPANILE WORK AT UNICAMPANIA.IT (EX UNINA2) TEACHER AT APPLE FOUNDATION COURSE FOR UNICAMPANIA FOLLOW ME ON TWITTER: @LELIOC LELIO.CAMPANILE@GMAIL.COM WWW.LELIOCAMPANILE.IT Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
  • 3. 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 lelio.campanile@gmail.com
  • 4. 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 lelio.campanile@gmail.com
  • 5. 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 lelio.campanile@gmail.com
  • 6. PYTHON VS SWIFT Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
  • 7. GOOGLE È TUO AMICO! Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
  • 8. SE CERCHI PYTHON E SEI FORTUNATO ! Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
  • 9. SE CERCHI SWIFT E SEI FORTUNATO ! Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
  • 10. SWIFT È COMPILATO GENERA FILE ESEGUIBILI ESATTAMENTE COME OBJECTIVE-CLelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
  • 11. PYTHON È PSEUDO- COMPILATO GENERA UN BYTECODE .PYC Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
  • 12. LE PERFORMANCE?? Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
  • 13. 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 lelio.campanile@gmail.com
  • 14. I COMMENTI // Commenti singola linea /* Commenti su più linee in stile C */ # Python commenti singola linea Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
  • 15. 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 lelio.campanile@gmail.com
  • 16. ... 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 lelio.campanile@gmail.com
  • 17. 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 lelio.campanile@gmail.com
  • 18. TYPE INFERENCE SWIFT var nome = "lelio" var nome = 10 // errore!!! // swift è fortemente e staticamente tipizzato Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
  • 19. 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 lelio.campanile@gmail.com
  • 20. 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 lelio.campanile@gmail.com
  • 21. 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 lelio.campanile@gmail.com
  • 22. 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 lelio.campanile@gmail.com
  • 23. 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 lelio.campanile@gmail.com
  • 24. 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 lelio.campanile@gmail.com
  • 25. CICLI # Python for n in numeri: print(n) // Swift for n in numeri{ print(n) } SI ASSOMIGLIANO, VERO? Lelio Campanile per Pycon Otto @lelioc lelio.campanile@gmail.com
  • 26. 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 lelio.campanile@gmail.com
  • 27. 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 lelio.campanile@gmail.com
  • 28. 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 lelio.campanile@gmail.com
  • 29. 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 lelio.campanile@gmail.com
  • 30. ...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 lelio.campanile@gmail.com
  • 31. 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 lelio.campanile@gmail.com
  • 32. 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 lelio.campanile@gmail.com
  • 33. 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 lelio.campanile@gmail.com
  • 34. 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 lelio.campanile@gmail.com