El#Lenguaje#de#
Programación#
Swi$%
Alberto#Pacheco#
M8Learning#Lab#
IT#Chihuahua#
Módulo#I#
Swi>#Básico#
Sesión##2#
37#
38#
Tendencias#Lenguajes#(200682015)#
3#
Indeed#Job#Trends:#hOp://goo.gl/btI5W3#
7#
WWDC#June#2014#
¿Qué#es#Swi>?#
Swi;$adopts$safe$
programming$paIerns$and$
adds$modern$features$to$
make$programming$easier,$
more$flexible,$and$more$fun.$
11#
Apple#“About#Swi>”#
¿Qué#es#Swi>?#
•  Chris#LaOner,#Apple,#2010#
•  Objeccve8C,#Dylan,#JS,#Groovy,#
Rust,#Haskell,#Ruby,#Python,#C#,#
CLU,#Pascal,#Smalltalk,#etc.#
15#
24#
25#
29#
30#
36#
40#
41#
Step%#2%
42#
Step%#3%
43#
44#
45#
46#
Hola#Mundo!#
2#
#include <stdio.h>!
!
int main( int argc, char **argv )!
{!
printf("Hola Mundo!n");!
return 0;!
}!
Lenguaje#C#
3#
!
!
!
!
println("Hola Mundo!")!
!
!
Swi>#
4#
!
!
!
!
println(“Hola Mundo!”)!
!
!
Swi>#
Sin%
Punto+y+coma%
5#
!
!
!
!
NSLog(@“Hola Mundo!”);!
!
!
ObjecJve8C#
Sin%@%de%cadenas%
NSString%
6#
Datos#8#Variables#
7#
var precio = 3_519.27 !
Variables#
11#
var precio = 3_519.27 !
precio: Double = 3519.27 !
12#
Variables#
Datos#–#Tipos#de#Datos#
13#
var precio = 3_519.27 !
precio: Double = 3519.27 !
14#
var edad: Int = 20!
var costo: Double = 12.50!
var alias: String = “Beto”!
var geek: Bool = true!
var letra: Character = "á" !
!
Tipos#de#Datos#
19#
var edad = 20!
var costo = 12.50!
var alias = "Beto"!
var geek = true!
var letra = "á" !
!
Tipos#de#Datos#
20#
var edad = 20!
var costo: Double!
var alias!
!
“Toda&variable&debe&tener&/po&y&valor&
antes&de&ser&usada”&
Tipos#de#Datos#
21#
var edad = 20 ✔!
var costo: Double ✗ !
var alias ✗!
!
error: type annotation missing in pattern!
var alias!
^!
Tipos#de#Datos#
24#
var edad = 20 ✔!
var costo: Double = 1.5 ✔ !
var alias ✗!
var frac: Double ✗!
No&olvides:&
1)  Inicializar&variable&con&un&valor&
2)  Opcional:&escribir&su&/po&de&dato&
Tipos#de#Datos#
25#
Datos#–#Constantes#
26#
let geek = true!
!
Constantes#
geek: Bool = true !
27#
“Si&no&cambia,&use&let”&
let edad ✗!
let edad: Int ✗!
#
!
!
Constantes#
error: type annotation missing in
pattern!
!
error: 'let' declarations require an
initializer expression!
29#
let x: Int ✔
if condition {!
x = foo()!
} else {!
x = bar()!
}!
use(x)!
Constantes#
30#
let edad = 15 ✔ !
#
!
!
Constantes#
31#
No&olvides:&
1)  Inicializar&constante&con&un&valor&
let edad: Int = 15 ✔ !
#
!
!
Constantes#
32#
No&olvides:&
1)  Inicializar&constante&con&un&valor&
2)  Opcional:&escribir&su&/po&de&dato&
var edad: Int!
let !: 3.1416!: 3.1416!
“Si&no&cambia,&use&let”&
Constante#o#Variable?#
33#
Alt%+%P%
var edad: Int!
let !: 3.1416 ✔!: 3.1416 ✔!
!
Constante#o#Variable?#
Acepta%caracteres%
en%UNICODE%
34#
let ! = 3.1416!
! = 0.5 ✗!
!
#
!
!
Constantes#
error: Cannot assign a value to a
constant !
35#
import Darwin!
let !: M_PI!: M_PI!
!
Constante#π#
Constante%
Predefinida%
36#
Caso#de#Estudio#
37#
Ejemplo:#Un#Formulario#
Qué#hacer#cuando#no#se#
capturan#todos#los#valores?#
38#
Números#Mágicos#
var edad: Int!
!
edad = input()!
!
if (edad != -1) {!
println(“Tiene ”+edad+” años”)!
}!
!
NULL,%0,%nil,%+1,%INT_MAX,%etc.%
39#
Valores#Opcionales#
40#
Valores#Opcionales#
var edad: Int?!
!
edad = input()!
!
if edad != nil {!
println(String(edad!)+” años”)!
}!
!
41#
Valores#Opcionales#
var edad: Int?!
!
edad = input()!
!
if edad != nil {!
println(String(edad!)+” años”)!
}!
!
42#
Valores#Opcionales#
var edad: Int?!
!
edad = input()!
!
if edad != nil {!
println(String(edad!)+” años”)!
}!
!
43#
Valores#Opcionales#
var edad: Int?!
!
edad = input()!
!
if edad != nil {!
println(String(edad!)+” años”)!
}!
!
44#
Unwrapping%
OpJonals#
“Sólo&el&/po&de&dato&opcional&puede&
tener&un&valor&de&nil”&
Incluyendo&los&datos&primi/vos&
46#
OpJonals#
Incluyendo&los&datos&primi/vos&
var nombre: String? = ""!
!
var nerd: Bool? = true!
!
47#
OpJonals#
“Sólo&el&/po&de&dato&opcional&puede&
tener&un&valor&de&nil”&
&
nil&es&el&valor&de&inicialización&por&
default&
48#
OpJonals#
var nerd: Bool?!
!
!
nerd: Bool? = nil!
nil&es&el&valor&de&inicialización&por&
default&
49#
OpJonals#
var nerd: Bool = nil!
!
!
error: ...!
NO&se&permite&que&un&/po&de&dato&que&
NO&es&opcional&valga&nil
50#
Sentencia#If#
51#
if##sin#(#)#
var edad: Int?!
!
edad = input()!
!
if edad != nil {!
println("Tiene (edad!) años")!
}!
! Sin%paréntesis%()%
52#
if##con#{#}#
var edad: Int?!
!
edad = input()!
!
if edad != nil {!
println("Tiene (edad!) años")!
}!
! Obligatorio%
usar%{}%siempre%
53#
String#InterpolaJon##
var edad: Int?!
!
edad = input()!
!
if edad != nil {!
println("Tiene (edad!) años")!
}!
!
54#
Unwrapping#an#OpJonal#
var edad: Int?!
!
edad = input()!
!
if edad != nil {!
let tmp = edad!!
println(“(12*tmp) meses”)!
}!
!
Cast%to%Int%
55#
Unwrapping#an#OpJonal#
var edad: Int?!
!
edad = input()!
!
if let tmp = edad {!
println(“(12*tmp) meses”)!
}!
!
56#
NO%CAST%
Rangos#y#sentencia#switch#
57#
Switch#
switch edad {!
case 0:!
println(“Error de captura”)!
case 18...30:!
println(“Aspirante”)!
}!
!
NO%break%
58#
switch edad {!
case 18...30:!
println(“Aspirante”)!
default:!
println(“Rechazar”)!
}!
!
RANGO%
59#
!
18...30!
!
!
18..<30!
18%+%30%
18%+%29%
Rangos#
60#
Switch#
switch edad {!
case 0:!
println(“Error de captura”)!
case 18...30:!
println(“Aspirante”)!
}!
!
61#
Debe&ser&exhaus/vo,&&
contemplar&todos&los&casos&
Switch#
switch edad {!
case 18...30:!
println(“Aspirante”)!
default:!
println(“Rechazar”)!
}!
!
62#
Ciclos#
63#
Ciclos#y#Rangos#
for i in 1...4 {!
println(i)!
}!
!
1!
2!
3!
4!
64#
Ciclos#y#Cadenas#
for i in “Swift” {!
println(i)!
}!
!
S!
w!
i!
f!
t!
65#
Ciclos#y#Arreglos#
for i in [1,1,2,3,5] {!
println(i)!
}!
!
1!
1!
2!
3!
5!
66#
Ciclos#y#Arreglos#
var d = [1,1]!
for i in 0...4 {!
d.append(d[i]+d[i+1])!
}!
for x in d { print("(x),") }!
!
1,1,2,3,5,8,13!
67#
Playgrounds#
68#
Playgrounds#
69#
70#
Playgrounds#
71#
for x in 0...100 {!
let d = Double(x)!
d * sin(d * M_PI/8)!
}!
Funciones#
72#
Funciones#
func hola(nom: String = “Mundo”) {!
println(“Hola (nom)!”)!
}!
!
73#
Funciones#
func hola(nom: String = “Mundo”) {!
println(“Hola (nom)!”)!
}!
!
> hola()!
Hola Mundo!!
!
> hola(nom:"Ana")!
Hola Ana!!
74#
Funciones#
func fib(n:Int) -> Int {!
switch n {!
case 0, 1:!
return 1!
default:!
return fib(n-1) + fib(n-2)!
}!
}!
!
75#
Funciones#
func fib(n:Int) -> Int {!
switch n {!
case 0, 1:!
return 1!
default:!
return fib(n-1) + fib(n-2)!
}!
}!
!
fib(7)!
!
21!
77#
Funciones#
1!
2!
3!
…!
func fib(n:Int) -> Int {!
switch n {!
case 0, 1:!
return 1!
default:!
return fib(n-1) + fib(n-2)!
}!
}!
for n in 1...9 {!
println(fib(n))!
} !
78#
Funciones#
sec: [Int] = { 1,2,3,5,8,13,21,34,55 }!
func fib(n:Int) -> Int {!
switch n {!
case 0, 1:!
return 1!
default:!
return fib(n-1) + fib(n-2)!
}!
}!
var sec = [Int]()!
for n in 1...9 { sec.append(fib(n)) } !
80#
Patrones#
func fib(n:Int) -> Int {!
switch n {!
case let x where x<2:!
return 1!
default:!
return fib(n-1) + fib(n-2)!
}!
}!
!
81#
El#Lenguaje#de#
Programación#
Swi$%
%
{#Módulo#1#–#Sesión#2}#
Alberto#Pacheco#
alberto@acm.org#
@beto0303#
#

Swift Programming Basics (Part I)