Back-End

14 out, 2014

Falando sobre Swift – REPL

100 visualizações
Publicidade

Nesta nova série, vamos estudar a nova linguagem de programação da Apple, a Swift. Não é necessário nenhuma experiência anterior em tecnologias Apple, mas é preciso ter o mais recente Mac OSX e Xcode 6.0.1 ou superior instalados para conseguir acompanhar.

O que é a Swift?

Swift é uma linguagem de programação híbrida, funcional e orientada a objetos com tipagem estática. É um pouco como Scala (mas tem a previsão de um futuro muito melhor) e é compilada para a execução de código em uma plataforma específica, em vez de usar uma VM como Java ou C#. Foi criada pelo time LLVM (que produziu o clang, compilador de C++/Objective C utilizado em todas os aparelhos Apple e iOS) e muito da experiência nessas linguagens foi levada para a Swift. Como é capaz de compilar em “bare metal”, Swift oferece formas de representar tanto tipos de objeto com semânticas de passagem por referência como tipos de estrutura com passagem por valor. Como resultado, é igualmente capaz de ser usada para apresentar interfaces e para implementar serviços de back-end de alto desempenho.

Mas a Swift tem alguns aspectos que a tornam imediatamente mais valiosa que C e Objective-C. Primeiramente, apesar de ser uma linguagem estaticamente tipada, as variáveis podem usar inferências de tipo para evitar ter que usar tipos pré-definidos em todo lugar, como é feito com o C. Isso faz com que a Swift se pareça muito mais com uma linguagem dinâmica como JavaScript, mas com muito mais performance no runtime. Em segundo lugar, Swift tem um interpretador (chamado de swift) que pode ser utilizado para aprender a linguagem e prototipar soluções. E tem mais: Xcode 6 vem com uma feature chamada Playgrounds, que oferece um GUI interativo juntamente com resultados parciais da execução do código, e a habilidade de fazer gráficos dos resultados com o tempo. Vamos olhar isso em um próximo artigo.

Usando o Swift REPL

Para rodar um programa na Swift, digite xcrun swift no terminal. Você verá um popup mostrando o seguinte prompt:

$ xcrun swift
Welcome to Swift!  Type :help for assistance.
 1>

 

WelcomeToSwift

Nota: se o REPL avisar que não tem suporte para o OSX no Xcode 6.0, então rode com um argumento –sdk que aponte para um local iPhoneSimulator.sdk como xcrun swift -sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk.

O prompt 1> é o prompt de imput; expressões e comandos digitados aqui serão executados sob demanda. Ao digitar uma série de expressões, você verá o seguinte resultado:

1> "Hello " + "Swift!"
$R0: String = "Hello Swift!"
 2> 3+4
$R1: Int = 7
 3> "D\(7-5)"
$R2: String = "D2"
 4> 3.141
$R3: Double = 3.141
 5> [1,2,3,4,5]
$R4: [Int] = 5 values {
  [0] = 1
  [1] = 2
  [2] = 3
  [3] = 4
  [4] = 5
}
 6> ["name":"AlBlue's Blog","url":"http://alblue.bandlem.com/Tag/swift/"]
$R5: [String : String] = {
  [0] = {
    key = "name"
    value = "AlBlue's Blog"
  }
  [1] = {
    key = "url"
    value = "http://alblue.bandlem.com/Tag/swift/"
  }
}

Os valores $Rn são variáveis intermediárias que podem ser usadas para armazenamento dos resultados. Isso pode ser chamado novamente usando a variável na expressão. Note que Swift detectou o tipo de cada um desses e indicou qual tipo está no output, incluindo Bool, String, Int (vários tamanhos), Double (e Float), Array e Dictionary. Esses são de tipos seguros e não podem ser utilizados para misturar valores de tipos diferentes:

 7> $R4 + [ "once", "I", "caught", "a", "fish", "alive" ]
error: cannot invoke '+' with an argument list of type '(@lvalue Double, $T8)'
$R4 + [ "once", "I", "caught", "a", "fish", "alive" ]
~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 8> $R5["year"] = 2014
error: '@lvalue $T5' is not identical to '(String, String)'
$R5["year"] = 2014

Variáveis e Constantes

É possível criar variáveis com a palavra-chave var e constantes com a palavra-chave let (muito parecido com var e val em Scala, non-final e final em Java ou non-const e const em C/C++). Eles podem ser definidos com ou sem um tipo explícito. Assim como outras linguagens de programação funcionais, o estilo na Swift é ter a variável primeiro, seguida pelo tipo, como a:Int, em vez do estilo de sintaxe de C e Java, que é Int a. A razão para essa diferença é que isso permite que o tipo seja opcional; é muito mais fácil fazer um parse de a(:Int)? do que de (Int)? a.

9> let pi_ish = 3.141
pi_ish: Double = 3.141
10> pi_ish = 3
error: cannot assign to 'let' value 'pi_ish'
pi_ish = 3
~~~~~~ ^
11> var today = 2014_09_13
today: Int = 20140913
12> today = 2014_09_14
today: Int = 20140914
13> let anInt = 1
anInt: Int = 1
14> let aDouble: Double = 1
aDouble: Double = 1
15> let aByte: Int8 = 0x7f
aByte: Int8 = 127
16> let anUnsignedByte: UInt8 = 0xff
anUnsignedByte = 255

Observe que o underscore é permitido em valores numéricos para facilitar a leitura, e valores hexadecimais podem ser também especificados. Ao mudar qual é o tipo da variável, as variáveis resultantes vão assumir uma quantidade diferente de espaço no run-time, que se for alocar um valor de milhares de bytes vai fazer uma grande diferença se cada byte tem até 8 bits ou 32 bits.

No próximo artigo, falaremos sobre Playgrounds. Até lá.

***

Artigo traduzido pela Redação iMasters com autorização do autor. Publicado originalmente em http://alblue.bandlem.com/2014/09/swift-introduction-to-the-repl.html