Swift (linguagem de programação)

Origem: Wikipédia, a enciclopédia livre.
Disambig grey.svg Nota: Para outros significados, veja Swift.
Swift
Paradigma
Surgido em 2 de junho de 2014 (7 anos)
Última versão 5.5 (20 de setembro de 2021; há 7 meses[1])
Criado por
Estilo de tipagem
  • estática
  • forte
  • inferida
Principais implementações swiftc
Influenciada por
Influenciou Rust[2]
Sistema operacional
Licença: Apache 2.0 (a partir da versão 2.2)
Proprietária (antes da versão 2.2)
Extensão do arquivo: .swift
Página oficial swift.org

Swift é uma linguagem de programação desenvolvida pela Apple para desenvolvimento no iOS, macOS, watchOS, tvOS e Linux. Swift foi desenvolvida para manter compatibilidade com a API Cocoa e com código existente em Objective-C. O compilador usa a infraestrutura do LLVM e é distribuído junto do Xcode desde a versão 6.[4]

Foi anunciada na WWDC em 2014, conferência anual da Apple.[5] Inicialmente um software proprietário, a partir da versão 2.2 (dezembro de 2015) foi distribuída sob a licença Apache 2.0.[6][7]

Em março de 2017, Swift ficou entre as 10 linguagens mais populares, de acordo com o Índice Tiobe,[8] e atualmente está entre as 20 mais populares.[9] De acordo com uma pesquisa conduzida pela RedMonk, está entre as 10 linguagens mais populares.[10]

História[editar | editar código-fonte]

O desenvolvimento do Swift teve início em julho de 2010 por Chris Lattner, com a eventual colaboração de muitos outros programadores da Apple. O Swift é inspirado em linguagens como Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, entre outras.[11] Uma versão beta da linguagem foi disponibilizada a desenvolvedores Apple durante a WWDC de 2014 .

A versão 1.0 foi lançada em 9 de setembro de 2014, com a versão Gold Master do Xcode 6.0 para iOS.[12] A versão 1.1 foi lançada em 22 de outubro de 2014, com o lançamento do Xcode 6.1.[13] Swift 1.2 foi lançado em 8 de abril de 2015, com o lançamento do Xcode 6.3.[14] Swift 2.0 teve seu anúncio durante a WWDC de 2015, e foi disponibilizado para a publicação de aplicativos na App Store em 21 de setembro de 2015.[15] Swift 3.0 foi lançado em 13 de setembro de 2016.[16] Swift 4.0 foi lançado em 19 de setembro de 2017.[17] Swift 4.1 foi lançado em 29 de março de 2018.[18] Swift 4.2 foi lançado em 17 de setembro de 2018.[19]

Swift ganhou primeiro lugar na categoria Linguagem de Programação Mais Amada em uma sondagem de desenvolvedores do Stack Overflow em 2015[20] e segundo lugar em 2016.[21]

Em 3 de dezembro de 2015, a linguagem Swift, bibliotecas suplementares, depurador, e gerenciador de pacotes, tornaram-se open source sob a licença Apache 2.0 com uma Runtime Library Exception,[22] e Swift.org foi criado para hospedar o projeto. O código fonte é hospedado no GitHub.

Durante a WWDC de 2016, a Apple anuncia um aplicativo exclusivo para iPad, chamado Swift Playgrounds, com a finalidade de ensinar a programação na linguagem. O aplicativo dispõe de uma interface análoga a um vídeo-game 3D que concede feedback gráfico conforme a disposição e execução das linhas de código.[23][24][25]

Em janeiro de 2017, Chris Lattner anunciou seu regresso da Apple por uma posição na Tesla Motors, deixando o cargo de líder de projeto do Swift para Ted Kremenek.[26][27]

Histórico de Versões
Data de Lançamento Versão
09/09/2014 Swift 1.0
22/10/2014 Swift 1.1
08/04/2015 Swift 1.2
21/09/2015 Swift 2.0
13/09/2016 Swift 3.0
19/09/2017 Swift 4.0
29/03/2018 Swift 4.1
17/09/2018 Swift 4.2
25/03/2019 Swift 5.0
24/03/2020 Swift 5.2
16/09/2020 Swift 5.3
26/04/2021 Swift 5.4

Características[editar | editar código-fonte]

Swift é uma alternativa à linguagem Objective-C que emprega conceitos modernos da teoria de linguagem de programação e se empenha em oferecer uma sintaxe mais simples. Em sua apresentação, foi descrita como "Objective-C sem a corpulência do C".[28][29]

O Swift retém conceitos chave do Objective-C como protocolos, clausura e categorias, porém, frequentemente substituindo a sintaxe por versões mais limpas e permitindo a aplicação desses conceitos em outras estruturas da linguagem, como tipos enumerados (enums).[30]

Controle de acesso[editar | editar código-fonte]

O Swift suporta seis níveis de controle de acesso com os símbolos: open, public, internal, fileprivate, e private. Ao contrário de outras linguagens orientadas a objetos, esses controles de acesso ignoram hierarquias de herança: private indica que um símbolo só é acessível no escopo imediato, fileprivate indica que só é acessível internamente ao arquivo, internal indica que é acessível no escopo do módulo que o contém, public indica que é acessível de qualquer módulo, e open (apenas para classes e seus métodos) indica que a classe pode ser "subclassificada" de fora do módulo.[31]

Tipagem de valor[editar | editar código-fonte]

Em muitas linguagens orientadas a objetos, objetos são representados internamente em duas partes. O objeto é armazenado como um bloco de dados posicionado no heap, enquanto o nome (ou "handle") do objeto é representado por um ponteiro. Objetos são passados entre métodos por meio da cópia do valor do ponteiro, permitindo assim, o acesso aos mesmos dados contidos no heap por qualquer um que possua uma cópia. Por sua vez, tipos básicos como valores de inteiros e pontos flutuantes são representados diretamente; o handle contém os dados, não um ponteiro para os mesmos, e esses dados são passados diretamente aos métodos por cópia. Esses estilos de acesso são denominados passagem por referência no caso dos objetos, e passagem por valor para tipos básicos.

De forma similar ao C#, o Swift oferece suporte nativo a objetos usando ambas as semânticas de passagem por referência e passagem por valor, a primeira usando a declaração class e a outra usando struct. Structs no Swift tem quase todas as mesmas características das classes: métodos, protocolos de implementação e uso de mecanismos de extensão. Por esse motivo, a Apple nomeou genericamente todos os dados como instâncias, ao invés de objetos ou valores. Contudo, structs não permitem herança.[32]

// Definição de struct
struct Resolution {
    var width = 0
    var height = 0
}

// Criação de instância
let hd = Resolution(width: 1920, height: 1080)

// Sendo "Resolution" um struct, uma cópia da instância é criada
var cinema = hd

Enumerações e casamento de padrões[editar | editar código-fonte]

Swift possui enumerações de tipagem forte, e suas variantes podem carregar valores diversos. Exemplo de declaração de enumerações e o casamento de padrões:

enum Browser {
    case chrome
    case firefox
    case safari
    case edge
    case ie(UInt8)
}

let browser = Browser.ie(11)
switch browser {
case .chrome:
    fallthrough // .chrome ou .edge
case .edge:
    print("Chromium")
case let .ie(version):
    print("Internet Explorer \(version)")
default:
    print("Outro navegador")
}

Opcionais[editar | editar código-fonte]

Uma importante característica nova no Swift são tipos opcionais, que permitem que valores ou referências operem de forma semelhante ao padrão comum do C, em que um ponteiro pode prover referência a um valor ou ser nulo.[33] Exemplo:

let website: String? = "https://www.wikipedia.org"
if website != nil {
    print("Website: \(website!)") // `!` desembrulha o valor forçadamente
}

// Forma alternativa (padrão)
if let addr = website {
    print("Website: \(addr)")
}

// Forma alternativa (guarda)
func unwrap(_ website: String?) -> String {
    guard let addr = website else {
        return "" // Retorna prematuramente
    }
    return addr
}

Tratamento de erros[editar | editar código-fonte]

Swift possui exceções de forma semelhante a Objective-C. Exemplo de um erro personalizado:

enum ValueError: Error {
    case tooSmall
    case tooLarge
}

// Função que pode falhar
func verify(n: Int) throws -> Int {
    guard n >= 4 else {
        throw ValueError.tooSmall
    }

    guard n <= 20 else {
        throw ValueError.tooLarge
    }

    return n
}

E o tratamento do erro:

do {
    print("Número:", try verify(n: 3))
    print("Número:", try verify(n: 4))
} catch ValueError.tooSmall { // Captura erro específico
    print("Erro: número muito pequeno")
} catch { // Demais erros
    print("Erro")
}

Genéricos[editar | editar código-fonte]

Exemplo de uma árvore binária em Swift:

// Tipos recursivos precisam ser declarados como `indirect`
indirect enum Tree<T> {
    case empty
    case node(T, Tree, Tree)
}

let tree = Tree.node(5.96, .empty, .node(1.0, .empty, .empty))

// O primeiro membro é extraído como consante; ignora demais membros
if case let .node(value, _, _) = tree {
    print("\(value)")
}

// Os membros são extraídos se a condição for satisfeita
if case let .node(value, left, right) = tree, value < 6.0 {
    print("-> \(left)")
    print("-> \(right)")
}

Iteradores e clausuras[editar | editar código-fonte]

Em Swift, um iterador é representando pelo protocolo IteratorProtocol; o protocolo Sequence fornece métodos adaptadores para criar novos iteradores.[34][35] Também possui um literal para representar intervalos (um tipo de iterador).[36] No exemplo a seguir o programa lista os números primos entre 4 e 20:

var numbers: [Int] = [];
// `4...20` é um iterador inclusivo (inclui 20)
for i in 4...20 {
    // `2..<i` é um iterador exclusivo, ex.: `2..<5` inclui 2, 3 e 4.
    // `{ x in i % x != 0 }` é uma clausura que recebe `x` e retorna booliano.
    if (2..<i).allSatisfy({ x in i % x != 0 }) {
        numbers.append(i)
    }
}
print("Os números primos entre 4 e 20 são: \(numbers)")

Exemplos[editar | editar código-fonte]

Programa Olá Mundo[editar | editar código-fonte]

Ver artigo principal: Programa Olá Mundo
print("Olá, Mundo!")

Algoritmo de Trabb Pardo-Knuth[editar | editar código-fonte]

Ver artigo principal: Algoritmo de Trabb Pardo-Knuth
import Foundation

func f(_ t: Double) -> Double {
    sqrt(abs(t)) + 5 * pow(t, 3)
}

let a = (1...11).map { _ -> Double in
    guard let input = readLine() else {
        return 0
    }
    return Double(input)!
}

a.lazy.map(f).enumerated().reversed().forEach { (i, y) in
    print(i, y > 400 ? "TOO LARGE" : y)
}

SwiftUI[editar | editar código-fonte]

Ver artigo principal: Interface gráfica do usuário

Um programa Olá Mundo do SwiftUI se parece com:

import SwiftUI

@main
struct HelloWorldApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

struct ContentView: View {
    var body: some View {
        Text("Olá, Mundo!")
            .font(.title)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

Desenvolvimento e outras implementações[editar | editar código-fonte]

Sendo em código aberto, a linguagem proporciona perspectivas de implementações para web. Alguns frameworks já foram desenvolvidos tais como o Kitura da IBM, Perfect e Vapor.[37][38][39]

Um grupo de trabalho oficial para "APIs de Servidor" também foi criado pela Apple,[40] com membros da comunidade de desenvolvedores Swift ocupando papel central.[41]

Outra implementação do Swift, chamada Silver, oferece compatibilidade com plataformas como Cocoa, a CLI da Microsoft (.NET), Java e Android; faz parte do Elements Compiler da empresa americana RemObjects Software.[42]

Ver também[editar | editar código-fonte]

Referências

  1. «Download Swift». swift.org (em inglês). Consultado em 12 de outubro de 2021 
  2. «Appendix: Influences - The Rust Reference» (em inglês). The Rust Project Developers. Consultado em 29 de novembro de 2020 
  3. «Swift.org - Platform Support». swift.org (em inglês). Consultado em 25 de julho de 2021 
  4. Timmer, John (5 de junho de 2014). «A fast look at Swift, Apple's new programming language» (em inglês). Ars Technica. Consultado em 12 de abril de 2018 
  5. Williams, Owen (2 de junho de 2014). «Apple announces Swift, a new programming language for iOS and OS X». thenextweb.com (em inglês). Consultado em 12 de abril de 2018 
  6. Kastrenakes, Jacob (3 de dezembro de 2015). «Apple's new programming language Swift is now open source» (em inglês). The Verge. Consultado em 12 de abril de 2018 
  7. Loten, Angus (3 de dezembro de 2015). «Apple Open Sources Swift in Latest Pitch to the Enterprise» (em inglês). The Wall Street Journal. Consultado em 12 de abril de 2018 
  8. Hein, Buster (9 de março de 2017). «Swift is already one of the world's most popular programming languages». www.cultofmac.com (em inglês). Consultado em 12 de abril de 2018 
  9. «TIOBE Index». www.tiobe.com (em inglês). Consultado em 12 de abril de 2018 
  10. O'Grady, Stephen (7 de março de 2018). «The RedMonk Programming Language Rankings: January 2018» (em inglês). RedMonk. Consultado em 13 de março de 2018 
  11. «Chris Lattner's Homepage». nondot.org. Consultado em 15 de março de 2019 
  12. «Swift Has Reached 1.0 - Swift Blog». developer.apple.com (em inglês). Consultado em 15 de março de 2019 
  13. «Xcode 6 Release Notes». developer.apple.com. Consultado em 15 de março de 2019 
  14. «Xcode 6 Release Notes». developer.apple.com. Consultado em 15 de março de 2019 
  15. «Swift 2 Apps in the App Store - Swift Blog». developer.apple.com (em inglês). Consultado em 15 de março de 2019 
  16. Inc, Apple (13 de setembro de 2016). «Swift 3.0 Released!». Swift.org (em inglês). Consultado em 15 de março de 2019 
  17. Inc, Apple (19 de setembro de 2017). «Swift 4.0 Released!». Swift.org (em inglês). Consultado em 15 de março de 2019 
  18. Inc, Apple (29 de março de 2018). «Swift 4.1 Released!». Swift.org (em inglês). Consultado em 15 de março de 2019 
  19. Inc, Apple (17 de setembro de 2018). «Swift 4.2 Released!». Swift.org (em inglês). Consultado em 15 de março de 2019 
  20. «Stack Overflow Developer Survey 2015». Stack Overflow. Consultado em 15 de março de 2019 
  21. «Stack Overflow Developer Survey 2016 Results». Stack Overflow. Consultado em 15 de março de 2019 
  22. Inc, Apple. «Swift.org». Swift.org (em inglês). Consultado em 15 de março de 2019 
  23. «Swift Playgrounds - Apple Developer». developer.apple.com. Consultado em 15 de março de 2019 
  24. «Swift Playgrounds». Apple (Brasil). Consultado em 15 de março de 2019 
  25. Mayo, Benjamin (13 de junho de 2016). «Apple announces Swift Playgrounds for iPad at WWDC, public release in fall». 9to5Mac (em inglês). Consultado em 15 de março de 2019 
  26. Cunningham, Andrew (10 de janeiro de 2017). «Longtime Apple programmer and Swift creator leaves Apple for Tesla». Ars Technica (em inglês). Consultado em 15 de março de 2019 
  27. Friday, Mike Wuerthele; January 13; 2017; PT, 10:14 am. «New Swift project head Ted Kremenek said to be running the show behind the scenes for some time». AppleInsider (em inglês). Consultado em 15 de março de 2019 
  28. Metz, Rachel. «Developers Like the Look of Apple's Swift Programming Language». MIT Technology Review (em inglês). Consultado em 16 de março de 2019 
  29. «Apple announces 'Swift,' a new programming language for OS X & iOS». VentureBeat (em inglês). 2 de junho de 2014. Consultado em 16 de março de 2019 
  30. «Advantages Of Using Swift Over Objective-C - Mind Studios». Blog - Mind Studios. 24 de fevereiro de 2017. Consultado em 17 de março de 2019 
  31. «Access Control — The Swift Programming Language (Swift 5)». docs.swift.org. Consultado em 17 de março de 2019 
  32. «Structures and Classes — The Swift Programming Language (Swift 5)». docs.swift.org. Consultado em 17 de março de 2019 
  33. «The Basics — The Swift Programming Language (Swift 5)». docs.swift.org. Consultado em 17 de março de 2019 
  34. «IteratorProtocol | Apple Developer Documentation» (em inglẽs). Apple Inc. Consultado em 27 de outubro de 2021 
  35. «Sequence | Apple Developer Documentation» (em inglẽs). Apple Inc. Consultado em 27 de outubro de 2021 
  36. «Range | Apple Developer Documentation» (em inglẽs). Apple Inc. Consultado em 27 de outubro de 2021 
  37. Barbosa, Greg (22 de fevereiro de 2016). «IBM brings Swift to the cloud, releases web framework Kitura written in Apple's programming language». 9to5Mac (em inglês). Consultado em 16 de março de 2019 
  38. Metz, Cade (24 de novembro de 2015). «Apple's Swift iOS Programming Language Isn't Just for Apps—It's Being Remade for Data Centers». Wired. ISSN 1059-1028 
  39. «VAPOR». GitHub (em inglês). Consultado em 16 de março de 2019 
  40. Inc, Apple (25 de outubro de 2016). «Server APIs Work Group». Swift.org (em inglês). Consultado em 16 de março de 2019 
  41. Inc, Apple. «Swift.org». Swift.org (em inglês). Consultado em 16 de março de 2019 
  42. «RemObjects Silver: The Swift for .NET and Java/Android | Elements». www.elementscompiler.com. Consultado em 16 de março de 2019 

Ligações externas[editar | editar código-fonte]


Ícone de esboço Este artigo sobre programação de computadores é um esboço. Você pode ajudar a Wikipédia expandindo-o.