SlideShare ist ein Scribd-Unternehmen logo
1 von 56
Downloaden Sie, um offline zu lesen
Mini-curso Gratuito




                      Eder Magalhães
Apresentação da Agenda

  Agenda

  •    Motivação
  •    Configurar ambiente
  •    Primeiro Exemplo
  •    Estrutura da linguagem
  •    Funções
  •    Valores Compostos
  •    Customizando Tipos
  •    Módulos
  •    Execução concorrente
  •    Utilitários e Dificuldades
  •    Perguntas
Apresentação da Agenda

  Agenda

  •    Motivação
  •    Configurar ambiente
  •    Primeiro Exemplo
  •    Estrutura da linguagem
  •    Funções
  •    Valores Compostos
  •    Customizando Tipos
  •    Módulos
  •    Execução concorrente
  •    Utilitários e Dificuldades
  •    Perguntas
Introdução

 Google




             Sem falar nos serviços...
Introdução

 Motivação

  •  Computadores poderosos extramamente rápidos, mas o
     desenvolvimento lento;
  •  Suporte a concorrência e coleta de memória limitados;
  •  Complexidade no controle de dependencia;
  •  Modelo engessado, tipagem como tirania ;
  •  Multi-core não é encairado/aproveitado como deveria
Introdução

                       O Que é o GO?




 •  Nova linguagem de desenvolvimento do Google.

 •  Desenvolvimento mais divertido, produtivo, concorrente e
    performático.
Introdução

 GO é uma linguagem:

  •    Compilada;
  •    Concorrente;
  •    Garbage-collected
  •    Type-safe
  •    Modular
  •    Expressiva
  •    Experimental
  •    Divertida
  •    Open Source (BSD License)
Introdução

 GO Team

  •  Russ Cox
  •  Rob Pike
  •  Ken Thompson
  •  Robert Griesemer
  •  Adam Langley
  •  Ian Taylor
Apresentação da Agenda

  Agenda

  •    Motivação
  •    Configurar ambiente
  •    Primeiro Exemplo
  •    Estrutura da linguagem
  •    Funções
  •    Valores Compostos
  •    Customizando Tipos
  •    Módulos
  •    Execução concorrente
  •    Utilitários e Dificuldades
  •    Perguntas
Introdução

 Compiladores

  •  Sistemas Operacionais suportados:
     o  Linux
     o  Mac OS

  •  Tipos de instruções
      o  Amd64 (64 bits x86)
      o  386 (32 bits x32)
      o  ARM
Introdução

 Instalando ambiente no Ubuntu (Linux) - Parte I
    # Instalação do repositório de fontes do GO
    $ sudo apt-get install mercurial

    # Instalação do compilador (gcc)
    $ sudo apt-get install bison gcc libc6-dev ed make

    # Estrutura de diretórios para GO
    $ mkdir $HOME/go
    $ mkdir $HOME/go/bin
    $ mkdir $HOME/go/src
Introdução

 Instalando ambiente no Ubuntu (Linux)
 # Configurar vars de ambiente no arquivo ˜/.bashrc
 export GOROOT=$HOME/go/src
 export GOBIN=$HOME/go/bin
 export GOOS=linux
 export GOARCH=386
 export PATH=$PATH:$HOME/go/bin

 # Download dos fontes do GO
 $ hg clone -r release https://go.googlecode.com/hg/ $GOROOT

 $ cd $GOROOT/src

 # Montar a estrutura do GO
 $ ./all.bash
Introdução

 Compilando

        fonte                        byte-code
                      8g (compila)
         Arquivo GO                  Arquivo 8




                                     Arquivo out

                                     executável
Apresentação da Agenda

  Agenda

  •    Motivação
  •    Configurar ambiente
  •    Primeiro Exemplo
  •    Estrutura da linguagem
  •    Funções
  •    Valores Compostos
  •    Customizando Tipos
  •    Módulos
  •    Execução concorrente
  •    Utilitários e Dificuldades
  •    Perguntas
Introdução

 Código, HelloGO !


  •  Rodando primeiro programa em GO...
Introdução

 Características do código

  •  Formato do código é UTF-8;

  •  Suporte a Unicode;

  •  O arquivo fonte deve declarar o pacote;

  •  Função main é o ponto de partida para execução.

  •  fmt é o módulo com funcões c/ formatação para I/O.
Introdução

Caracteristicas do código

 •  O arquivo fonte deve declarar seu pacote;

 •  Formato do codigo é UTF-8;

 •  Suporte a unicode;

 •  Função main é o ponto de partida para execução.
Apresentação da Agenda

  Agenda

  •    Motivação
  •    Configurar ambiente
  •    Primeiro Exemplo
  •    Estrutura da linguagem
  •    Funções
  •    Valores Compostos
  •    Customizando Tipos
  •    Módulos
  •    Execução concorrente
  •    Utilitários e Dificuldades
  •    Perguntas
Introdução

Palavras reservadas


   break      default       func     interface   select

   case       defer         go       map         struct

   chan       else          goto     package     switch

   const      fallthrough   if       range       type
   continue   for           import   return      var
Introdução

 Identificadores

  •  Inicia com letra ou _ seguido por letras ou digitos:


      a
      _x9
      VariavelComposta
      numeração
Introdução

 Comentários



     //comentario simples...

     /* delimitando inicio e fim */
Introdução

 Tipos

  •  Boleanos: bool
     true ou false

  •  Strings: string
     o  Array de bytes
     o  Imutável

     Normal
     `inicio e
     o fim`
     String      em      varios   pedacos
     Valor    /*isso nao */ string /*eh considerado*/ .
Introdução

 Tipos Numéricos Inteiros
           Tipo                       Range de Valores
   uint8 / byte          0 a 255
   uint16                0 a 65535
   uint32                0 a 4294967295
   uint64                0 a 18446744073709551615
   int8                  -128 a 127
   int16                 -32768 a 32767
   int32                 -2147483648 a 2147483647
   int64                 -9223372036854775808 a 9223372036854775807


   ** uint e int para 32 ou 64 bits
Introdução

Tipos Numéricos Ponto Flutuante

  Tipo                Range de Valores
   float32             IEEE-754
   float64             IEEE-754




   ** float para 32 ou 64 bits
Introdução

 Declaração de Variáveis
    var s string =   ;

    var x, y int32 = 10, 20;

    var (
      d float32 = 2.6;
      f float32 = 5.7;
    )

    var i = 25; //sem tipagem

    n := 15; //sem var e tipagem

    var z int; //inicia com valor 0
Introdução

 Conversores

  •  Com números:
    var x int = 100;

    var i int32 = x; //ñ compila

    var i int32 = int32(x); //ok


  •  Com string:
    string([]byte{'h', 'e', 'l', 'l', 'o'})
Introdução

 Declaração de Constantes
    const Pi float64 = 3.14159265358979323846

    const zero = 0.0; //sem tipagem

    const (
      size int64 = 1024;
      eof = -1; //sem tipagem
    )

    const a, b, c = 3, 4, "foo   //sem tipagem
Introdução

 Ponteiros: operadores & e *
    var x int = 50;            Valor *   Memória &
    //cópia                    50        X0701
    var i int = x;
                               50        X0809


    &x == &i;
    i++; //i é 51

    //referência
    var i *int = &x;


    &x == &i;

    (*i)++; //x é 51
Introdução

 Condicional - if
    if [resultado boolean] {
      ...
    } [else - opcional] {
      ...
    }

    var b bool = true;

    if b {
      return true
    }
Introdução

 Condicional - switch
    switch t := x.(type) {
      case nil:
        fmt.Print( t nao eh nada");
      case int:
        fmt.Print( t eh int );
      case float:
        fmt.Print( t eh float );
      case bool, string:
        fmt.Print( t eh boolean ou string );
      default:
        fmt.Print( t eh um de um tipo desconhecido");
      }
Introdução

 Laços
    for i := 0; i < 100; i++ {
      if i == 50 {
        continue;
      }
      fmt.Printf("%dn",i);
    }
    x := 10;
    for x < 10 { //substituto do while
      x++
    }
Apresentação da Agenda

  Agenda

  •    Motivação
  •    Configurar ambiente
  •    Primeiro Exemplo
  •    Estrutura da linguagem
  •    Funções
  •    Valores Compostos
  •    Customizando Tipos
  •    Módulos
  •    Execução concorrente
  •    Utilitários e Dificuldades
  •    Perguntas
Introdução

 Funções
    func soma(i int, x int) int {
      return i + x
    }

    func divide(d int, v int) (int bool) {
      if v > 0 { return d/v, true }

        return 0, false;
    }

    fmt.Print(soma(10, 5)); //15
    fmt.Print(divide(15,2)); //7
Introdução

Funções - Closures
    func sum() (func (int) int) {
      var x int;

        return func (n int) int {
            x += n; return n;
          }
    }

    var s = sum();

    fmt.Print(s(10)); //retorna e imprime 10
    fmt.Print(s(20)); //retorna e imprime 30
    fmt.Print(s(10)); //retorna e imprime 130
Apresentação da Agenda

  Agenda

  •    Motivação
  •    Configurar ambiente
  •    Primeiro Exemplo
  •    Estrutura da linguagem
  •    Funções
  •    Valores Compostos
  •    Customizando Tipos
  •    Módulos
  •    Execução concorrente
  •    Utilitários e Dificuldades
  •    Perguntas
Introdução

 Arrays

  •  Indexado a partir de 0;
  •  O tamanho é constante, e não pode ser negativo;
  •  A função len retorna o tamanho;

    var numeros [5]int; //inicializa com 0

    var notas = [3]int {7,8,6};

    var x = [10]int {5,2,4}; //outros elementos são 0

    var d = [...]int {4};

    fmt.Print(len(d)); //4
Introdução

 Slices

  •  Um pedaço de array;
  •  Indexado, mas o tamanho pode ser alterado;
  •  Mais barato do que o array;

          var fatia = notas[0:2];

          var n = []int {5, 7, 9};

          var x = &notas;

          for i:=0; i < len(x); i++ {
            fmt.Print(x[i]);
          }
Introdução

 Map

  •  Outra alternativa para estrutura de dados;

  var m map[string] int //Java: Map<String, Integer>

  m = map[string] int {     a : 500,   1 :60 }

  var x = m[ a ];
  var e = m[ 2 ]; //erro em execução

  m[ x ] = 77; //cria um novo elemento

  x, ok := m[ a ]; //sem erro, ok é false
Introdução

 Navegando em um Map


    //recupera a chave e valor
    for key, value := range m {
      fmt.Printf("key %s, value %gn", key, value)
    }

    //recupera a chave
    for key := range m {
      fmt.Printf("key %s, value %gn", key, m[value])
    }
Apresentação da Agenda

  Agenda

  •    Motivação
  •    Configurar ambiente
  •    Primeiro Exemplo
  •    Estrutura da linguagem
  •    Funções
  •    Valores Compostos
  •    Customizando Tipos
  •    Módulos
  •    Execução concorrente
  •    Utilitários e Dificuldades
  •    Perguntas
Introdução

 Struct

 •  Customização de tipos;
 •  Uma analogia a classe no Java;

          type Pessoa struct {
            nome, cpf string;
          }

          var p Pessoa;
          p.nome = "Paula";
          p.cpf = "9874458147";

          outro := Pessoa { Ana ,    213123131   }
Introdução

Struct e Ponteiros


      p Pessoa := Pessoa{"Carlos", "154548484"};

      ref := new (Pessoa); //ponteiro

      ref = &p;

      fmt.Print((*ref).nome)
Introdução

 Struct, anonymous field - Relacionamento

   type Endereco struct {
     logradouro, cep string;
   }

   type Pessoa struct {
     nome, cpf string;
     Endereco;
   }

   p := Pessoa{
      Endereco{ "Av. Bernardino","09789-111   },
      "Ana", "1959478766"
   };
Introdução

 Métodos

 •  Declarado fora do struct;
 •  Pode ser criado para qualquer type;


    func (p *Pessoa) formata() string {
       return nome;
    }

    p := &Pessoa{ "Gustavo", "9809890078" }
    fmt.Print(p.formata());
Introdução

 Métodos

 Customizando método em um array de int:

    type arrayInt [ ]int; //type

    func (v arrayInt) Sum() (s int) {
      for i, x := range v {
        s += x
      }
      //return vazio
      return
    }

    fmt.Print(arrayInt{10, 5, 7}.Sum());
Introdução

 Interface

 •  Tipo totalmente abstrato, conceito próximo ao do Java
    type Formatador interface { formata() string };

    var f Formatador;

    f := &Pessoa{"Carlos", "154548484"};
    fmt.Print(f.formata());

    type MeuInt int32;

    func (i MeuInt) formata () string {
      return string(i)
    }
    f = MeuInt(100);
Apresentação da Agenda

  Agenda

  •    Motivação
  •    Configurar ambiente
  •    Primeiro Exemplo
  •    Estrutura da linguagem
  •    Funções
  •    Valores Compostos
  •    Customizando Tipos
  •    Módulos
  •    Execução concorrente
  •    Utilitários e Dificuldades
  •    Perguntas
Introdução

 Módulos

  Todo código GO é organizado em pacotes:
    fmt à implementa funções para formtação de I/O;
    os à provê uma abstração para o sistema operacional;
    math à algumas constantes e funcionalidades matemáticas;
    http à implementa parse de requisição e respostas http;
    io à prove interface básica para manipulação I/O;
    reflect à funcionalidades para reflexão;

    time à funcionalidades para manipular e exibir informações de tempo;

    outros ...
Apresentação da Agenda

  Agenda

  •    Motivação
  •    Configurar ambiente
  •    Primeiro Exemplo
  •    Estrutura da linguagem
  •    Funções
  •    Valores Compostos
  •    Customizando Tipos
  •    Módulos
  •    Execução concorrente
  •    Utilitários e Dificuldades
  •    Perguntas
Introdução

 Goroutines

 •  É a terminologia do GO para um processo concorrente, a
 Thread do Java;
 •  Aciona uma função/método de forma assíncrona;
    func preparar(conteudo string, segundos int32) {
       time.Sleep(minutos*1e9);
       fmt.Println(conteudo," pronto!");
    }

    go preparar("feijoada", 10);
    go preparar("cafe", 5);
    fmt.Println("aguardando ...");
Apresentação da Agenda

  Agenda

  •    Motivação
  •    Configurar ambiente
  •    Primeiro Exemplo
  •    Estrutura da linguagem
  •    Funções
  •    Valores Compostos
  •    Customizando Tipos
  •    Módulos
  •    Execução concorrente
  •    Utilitários e Dificuldades
  •    Perguntas
Introdução

 O que mais?

 •  Documentação
    •  Godoc - gerador de documentação html, assim como o javadoc;
    •  Gofmt - formata o comentário para impressão;

 •  Testes
    •  Crie arquivos para testes unitários com sufixo *_test.go;
    •  Defina as funções de teste com o prefixo TestXxx(t *testing.T)
    •  Execute o gotest
Introdução

 Dificuldades

 •  Ambiente de desenvolvimento: IDE e Debug;

 •  Bibliotecas e ferramentas ainda recentes;

 •  Integração com Banco de Dados;

 •  Comunidade pequena;
Introdução

 Sites
     http://golang.org

     http://twitter.com/edermag

     http://twitter.com/globalcode




   eder@yaw.com.br
Apresentação da Agenda

  Agenda

  •    Motivação
  •    Configurar ambiente
  •    Primeiro Exemplo
  •    Estrutura da linguagem
  •    Funções
  •    Valores Compostos
  •    Customizando Tipos
  •    Módulos
  •    Execução concorrente
  •    Utilitários e Dificuldades
  •    Perguntas
Introdução

 Perguntas




             ?

Weitere ähnliche Inhalte

Was ist angesagt?

Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em PythonLuciano Ramalho
 
Python: programação divertida novamente
Python: programação divertida novamentePython: programação divertida novamente
Python: programação divertida novamenteRodrigo Amaral
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Elaine Cecília Gatto
 
Curso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NETCurso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NETLeonardo Melo Santos
 
Arduino e Python: Do It Yourself
Arduino e Python: Do It YourselfArduino e Python: Do It Yourself
Arduino e Python: Do It YourselfBruno Nascimento
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Luciano Ramalho
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...Manuel Menezes de Sequeira
 
Postgresql + Python = Power!
Postgresql + Python = Power!Postgresql + Python = Power!
Postgresql + Python = Power!Juliano Atanazio
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etcLuciano Ramalho
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Saulo Arruda
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em PythonLuciano Ramalho
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...Manuel Menezes de Sequeira
 
2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com Python2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com PythonJardel Weyrich
 
Python - Guia de bolso
Python - Guia de bolsoPython - Guia de bolso
Python - Guia de bolsoJean Lopes
 

Was ist angesagt? (20)

Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em Python
 
Python: programação divertida novamente
Python: programação divertida novamentePython: programação divertida novamente
Python: programação divertida novamente
 
Estrutura de Dados - Ponteiros
Estrutura de Dados - PonteirosEstrutura de Dados - Ponteiros
Estrutura de Dados - Ponteiros
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3
 
Curso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NETCurso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NET
 
Arduino e Python: Do It Yourself
Arduino e Python: Do It YourselfArduino e Python: Do It Yourself
Arduino e Python: Do It Yourself
 
Linguagem C - Ponteiros
Linguagem C - PonteirosLinguagem C - Ponteiros
Linguagem C - Ponteiros
 
Iteraveis e geradores
Iteraveis e geradoresIteraveis e geradores
Iteraveis e geradores
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
Linguagem lua
Linguagem luaLinguagem lua
Linguagem lua
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
 
Postgresql + Python = Power!
Postgresql + Python = Power!Postgresql + Python = Power!
Postgresql + Python = Power!
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
Introducao ao C#
Introducao ao C#Introducao ao C#
Introducao ao C#
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
 
2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com Python2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com Python
 
Python - Guia de bolso
Python - Guia de bolsoPython - Guia de bolso
Python - Guia de bolso
 

Andere mochten auch

Go Programming Language - Learning The Go Lang way
Go Programming Language - Learning The Go Lang wayGo Programming Language - Learning The Go Lang way
Go Programming Language - Learning The Go Lang wayIndicThreads
 
Introdução a linguagem Go
Introdução a linguagem GoIntrodução a linguagem Go
Introdução a linguagem GoAllisson Azevedo
 
Why you should care about Go (Golang)
Why you should care about Go (Golang)Why you should care about Go (Golang)
Why you should care about Go (Golang)Aaron Schlesinger
 
Go Concurrency
Go ConcurrencyGo Concurrency
Go Concurrencyjgrahamc
 

Andere mochten auch (7)

Go Programming Language - Learning The Go Lang way
Go Programming Language - Learning The Go Lang wayGo Programming Language - Learning The Go Lang way
Go Programming Language - Learning The Go Lang way
 
Introdução a linguagem Go
Introdução a linguagem GoIntrodução a linguagem Go
Introdução a linguagem Go
 
Go lang
Go langGo lang
Go lang
 
Why you should care about Go (Golang)
Why you should care about Go (Golang)Why you should care about Go (Golang)
Why you should care about Go (Golang)
 
Go Concurrency
Go ConcurrencyGo Concurrency
Go Concurrency
 
Golang
GolangGolang
Golang
 
Golang
GolangGolang
Golang
 

Ähnlich wie Introdução à Linguagem GO

Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascalJocelma Rios
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Pythonguestac3de
 
Curso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CCurso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CJoberthSilva
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Flávio Ribeiro
 
Henriquecristovao manual c-cpp
Henriquecristovao manual c-cppHenriquecristovao manual c-cpp
Henriquecristovao manual c-cppRUI VIEIRA
 
Programacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshareProgramacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshareMarcio Junior Vieira
 
Programação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice BasicProgramação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice BasicMarcio Junior Vieira
 
Programação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice BasicProgramação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice BasicAmbiente Livre
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxClaudia Ferlin
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao cprofwtelles
 
Por que Python? Vamos Conhecer? Vamos Aprender?
Por que Python? Vamos Conhecer? Vamos Aprender?Por que Python? Vamos Conhecer? Vamos Aprender?
Por que Python? Vamos Conhecer? Vamos Aprender?Juliano Atanazio
 
(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScriptCarlos Santos
 

Ähnlich wie Introdução à Linguagem GO (20)

Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascal
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
Linguagem_C.pdf
Linguagem_C.pdfLinguagem_C.pdf
Linguagem_C.pdf
 
Linguagens de programação - Go
Linguagens de programação - GoLinguagens de programação - Go
Linguagens de programação - Go
 
Ed1
Ed1Ed1
Ed1
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
 
Curso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CCurso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação C
 
Python para Programadores
Python para ProgramadoresPython para Programadores
Python para Programadores
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
 
Henriquecristovao manual c-cpp
Henriquecristovao manual c-cppHenriquecristovao manual c-cpp
Henriquecristovao manual c-cpp
 
Programacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshareProgramacao de macros_com_libre_office_basic_slideshare
Programacao de macros_com_libre_office_basic_slideshare
 
Programação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice BasicProgramação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice Basic
 
Programação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice BasicProgramação de Macros com LibreOffice Basic
Programação de Macros com LibreOffice Basic
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptx
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Por que Python? Vamos Conhecer? Vamos Aprender?
Por que Python? Vamos Conhecer? Vamos Aprender?Por que Python? Vamos Conhecer? Vamos Aprender?
Por que Python? Vamos Conhecer? Vamos Aprender?
 
(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript
 

Mehr von Eder Magalhães

Concorrencia, baixa Latência e alta disponibilidade
Concorrencia, baixa Latência e alta disponibilidadeConcorrencia, baixa Latência e alta disponibilidade
Concorrencia, baixa Latência e alta disponibilidadeEder Magalhães
 
Java Is Back, Novidade do Java 8
Java Is Back, Novidade do Java 8Java Is Back, Novidade do Java 8
Java Is Back, Novidade do Java 8Eder Magalhães
 
Desenvolva uma app Java web em poucos passos, com o Forge
Desenvolva uma app Java web em poucos passos, com o ForgeDesenvolva uma app Java web em poucos passos, com o Forge
Desenvolva uma app Java web em poucos passos, com o ForgeEder Magalhães
 
MongoDB outras alternativas de persistência
MongoDB outras alternativas de persistênciaMongoDB outras alternativas de persistência
MongoDB outras alternativas de persistênciaEder Magalhães
 
Java e uma visão sobre PaaS
Java e uma visão sobre PaaSJava e uma visão sobre PaaS
Java e uma visão sobre PaaSEder Magalhães
 
JDK8: Lambda, Jigsaw e novidades
JDK8: Lambda, Jigsaw e novidadesJDK8: Lambda, Jigsaw e novidades
JDK8: Lambda, Jigsaw e novidadesEder Magalhães
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingEder Magalhães
 
Introdução a Plataforma Java EE
Introdução a Plataforma Java EEIntrodução a Plataforma Java EE
Introdução a Plataforma Java EEEder Magalhães
 
As modificações na Linguagem: Java 7 e Java 8
As modificações na Linguagem: Java 7 e Java 8As modificações na Linguagem: Java 7 e Java 8
As modificações na Linguagem: Java 7 e Java 8Eder Magalhães
 
Desenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring RooDesenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring RooEder Magalhães
 
Futuro da linguagem e plataforma: Java 7 e 8
Futuro da linguagem e plataforma: Java 7 e 8Futuro da linguagem e plataforma: Java 7 e 8
Futuro da linguagem e plataforma: Java 7 e 8Eder Magalhães
 
Arquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineArquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineEder Magalhães
 
Richfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais ricoRichfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais ricoEder Magalhães
 
JSF 2 Components JustJava2011
JSF 2 Components JustJava2011JSF 2 Components JustJava2011
JSF 2 Components JustJava2011Eder Magalhães
 
Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVCEder Magalhães
 
JavaFX: Abordagem Prática
JavaFX: Abordagem PráticaJavaFX: Abordagem Prática
JavaFX: Abordagem PráticaEder Magalhães
 
Desenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringDesenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringEder Magalhães
 

Mehr von Eder Magalhães (20)

Cvc programacao reativa
Cvc programacao reativaCvc programacao reativa
Cvc programacao reativa
 
Concorrencia, baixa Latência e alta disponibilidade
Concorrencia, baixa Latência e alta disponibilidadeConcorrencia, baixa Latência e alta disponibilidade
Concorrencia, baixa Latência e alta disponibilidade
 
Java Is Back, Novidade do Java 8
Java Is Back, Novidade do Java 8Java Is Back, Novidade do Java 8
Java Is Back, Novidade do Java 8
 
Desenvolva uma app Java web em poucos passos, com o Forge
Desenvolva uma app Java web em poucos passos, com o ForgeDesenvolva uma app Java web em poucos passos, com o Forge
Desenvolva uma app Java web em poucos passos, com o Forge
 
MongoDB outras alternativas de persistência
MongoDB outras alternativas de persistênciaMongoDB outras alternativas de persistência
MongoDB outras alternativas de persistência
 
Java e uma visão sobre PaaS
Java e uma visão sobre PaaSJava e uma visão sobre PaaS
Java e uma visão sobre PaaS
 
JDK8: Lambda, Jigsaw e novidades
JDK8: Lambda, Jigsaw e novidadesJDK8: Lambda, Jigsaw e novidades
JDK8: Lambda, Jigsaw e novidades
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computing
 
Introdução a Plataforma Java EE
Introdução a Plataforma Java EEIntrodução a Plataforma Java EE
Introdução a Plataforma Java EE
 
As modificações na Linguagem: Java 7 e Java 8
As modificações na Linguagem: Java 7 e Java 8As modificações na Linguagem: Java 7 e Java 8
As modificações na Linguagem: Java 7 e Java 8
 
Desenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring RooDesenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring Roo
 
Futuro da linguagem e plataforma: Java 7 e 8
Futuro da linguagem e plataforma: Java 7 e 8Futuro da linguagem e plataforma: Java 7 e 8
Futuro da linguagem e plataforma: Java 7 e 8
 
Arquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineArquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App Engine
 
Java7 tdc2011
Java7 tdc2011Java7 tdc2011
Java7 tdc2011
 
Richfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais ricoRichfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais rico
 
JSF 2 Components JustJava2011
JSF 2 Components JustJava2011JSF 2 Components JustJava2011
JSF 2 Components JustJava2011
 
Introducao Spring ROO
Introducao Spring ROOIntroducao Spring ROO
Introducao Spring ROO
 
Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVC
 
JavaFX: Abordagem Prática
JavaFX: Abordagem PráticaJavaFX: Abordagem Prática
JavaFX: Abordagem Prática
 
Desenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringDesenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e Spring
 

Introdução à Linguagem GO

  • 1. Mini-curso Gratuito Eder Magalhães
  • 2. Apresentação da Agenda Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas
  • 3. Apresentação da Agenda Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas
  • 4. Introdução Google Sem falar nos serviços...
  • 5. Introdução Motivação •  Computadores poderosos extramamente rápidos, mas o desenvolvimento lento; •  Suporte a concorrência e coleta de memória limitados; •  Complexidade no controle de dependencia; •  Modelo engessado, tipagem como tirania ; •  Multi-core não é encairado/aproveitado como deveria
  • 6. Introdução O Que é o GO? •  Nova linguagem de desenvolvimento do Google. •  Desenvolvimento mais divertido, produtivo, concorrente e performático.
  • 7. Introdução GO é uma linguagem: •  Compilada; •  Concorrente; •  Garbage-collected •  Type-safe •  Modular •  Expressiva •  Experimental •  Divertida •  Open Source (BSD License)
  • 8. Introdução GO Team •  Russ Cox •  Rob Pike •  Ken Thompson •  Robert Griesemer •  Adam Langley •  Ian Taylor
  • 9. Apresentação da Agenda Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas
  • 10. Introdução Compiladores •  Sistemas Operacionais suportados: o  Linux o  Mac OS •  Tipos de instruções o  Amd64 (64 bits x86) o  386 (32 bits x32) o  ARM
  • 11. Introdução Instalando ambiente no Ubuntu (Linux) - Parte I # Instalação do repositório de fontes do GO $ sudo apt-get install mercurial # Instalação do compilador (gcc) $ sudo apt-get install bison gcc libc6-dev ed make # Estrutura de diretórios para GO $ mkdir $HOME/go $ mkdir $HOME/go/bin $ mkdir $HOME/go/src
  • 12. Introdução Instalando ambiente no Ubuntu (Linux) # Configurar vars de ambiente no arquivo ˜/.bashrc export GOROOT=$HOME/go/src export GOBIN=$HOME/go/bin export GOOS=linux export GOARCH=386 export PATH=$PATH:$HOME/go/bin # Download dos fontes do GO $ hg clone -r release https://go.googlecode.com/hg/ $GOROOT $ cd $GOROOT/src # Montar a estrutura do GO $ ./all.bash
  • 13. Introdução Compilando fonte byte-code 8g (compila) Arquivo GO Arquivo 8 Arquivo out executável
  • 14. Apresentação da Agenda Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas
  • 15. Introdução Código, HelloGO ! •  Rodando primeiro programa em GO...
  • 16. Introdução Características do código •  Formato do código é UTF-8; •  Suporte a Unicode; •  O arquivo fonte deve declarar o pacote; •  Função main é o ponto de partida para execução. •  fmt é o módulo com funcões c/ formatação para I/O.
  • 17. Introdução Caracteristicas do código •  O arquivo fonte deve declarar seu pacote; •  Formato do codigo é UTF-8; •  Suporte a unicode; •  Função main é o ponto de partida para execução.
  • 18. Apresentação da Agenda Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas
  • 19. Introdução Palavras reservadas break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var
  • 20. Introdução Identificadores •  Inicia com letra ou _ seguido por letras ou digitos: a _x9 VariavelComposta numeração
  • 21. Introdução Comentários //comentario simples... /* delimitando inicio e fim */
  • 22. Introdução Tipos •  Boleanos: bool   true ou false •  Strings: string o  Array de bytes o  Imutável   Normal   `inicio e   o fim`   String em varios pedacos   Valor /*isso nao */ string /*eh considerado*/ .
  • 23. Introdução Tipos Numéricos Inteiros Tipo Range de Valores uint8 / byte 0 a 255 uint16 0 a 65535 uint32 0 a 4294967295 uint64 0 a 18446744073709551615 int8 -128 a 127 int16 -32768 a 32767 int32 -2147483648 a 2147483647 int64 -9223372036854775808 a 9223372036854775807 ** uint e int para 32 ou 64 bits
  • 24. Introdução Tipos Numéricos Ponto Flutuante Tipo Range de Valores float32 IEEE-754 float64 IEEE-754 ** float para 32 ou 64 bits
  • 25. Introdução Declaração de Variáveis var s string = ; var x, y int32 = 10, 20; var ( d float32 = 2.6; f float32 = 5.7; ) var i = 25; //sem tipagem n := 15; //sem var e tipagem var z int; //inicia com valor 0
  • 26. Introdução Conversores •  Com números: var x int = 100; var i int32 = x; //ñ compila var i int32 = int32(x); //ok •  Com string: string([]byte{'h', 'e', 'l', 'l', 'o'})
  • 27. Introdução Declaração de Constantes const Pi float64 = 3.14159265358979323846 const zero = 0.0; //sem tipagem const ( size int64 = 1024; eof = -1; //sem tipagem ) const a, b, c = 3, 4, "foo //sem tipagem
  • 28. Introdução Ponteiros: operadores & e * var x int = 50; Valor * Memória & //cópia 50 X0701 var i int = x; 50 X0809 &x == &i; i++; //i é 51 //referência var i *int = &x; &x == &i; (*i)++; //x é 51
  • 29. Introdução Condicional - if if [resultado boolean] { ... } [else - opcional] { ... } var b bool = true; if b { return true }
  • 30. Introdução Condicional - switch switch t := x.(type) { case nil: fmt.Print( t nao eh nada"); case int: fmt.Print( t eh int ); case float: fmt.Print( t eh float ); case bool, string: fmt.Print( t eh boolean ou string ); default: fmt.Print( t eh um de um tipo desconhecido"); }
  • 31. Introdução Laços for i := 0; i < 100; i++ { if i == 50 { continue; } fmt.Printf("%dn",i); } x := 10; for x < 10 { //substituto do while x++ }
  • 32. Apresentação da Agenda Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas
  • 33. Introdução Funções func soma(i int, x int) int { return i + x } func divide(d int, v int) (int bool) { if v > 0 { return d/v, true } return 0, false; } fmt.Print(soma(10, 5)); //15 fmt.Print(divide(15,2)); //7
  • 34. Introdução Funções - Closures func sum() (func (int) int) { var x int; return func (n int) int { x += n; return n; } } var s = sum(); fmt.Print(s(10)); //retorna e imprime 10 fmt.Print(s(20)); //retorna e imprime 30 fmt.Print(s(10)); //retorna e imprime 130
  • 35. Apresentação da Agenda Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas
  • 36. Introdução Arrays •  Indexado a partir de 0; •  O tamanho é constante, e não pode ser negativo; •  A função len retorna o tamanho; var numeros [5]int; //inicializa com 0 var notas = [3]int {7,8,6}; var x = [10]int {5,2,4}; //outros elementos são 0 var d = [...]int {4}; fmt.Print(len(d)); //4
  • 37. Introdução Slices •  Um pedaço de array; •  Indexado, mas o tamanho pode ser alterado; •  Mais barato do que o array; var fatia = notas[0:2]; var n = []int {5, 7, 9}; var x = &notas; for i:=0; i < len(x); i++ { fmt.Print(x[i]); }
  • 38. Introdução Map •  Outra alternativa para estrutura de dados; var m map[string] int //Java: Map<String, Integer> m = map[string] int { a : 500, 1 :60 } var x = m[ a ]; var e = m[ 2 ]; //erro em execução m[ x ] = 77; //cria um novo elemento x, ok := m[ a ]; //sem erro, ok é false
  • 39. Introdução Navegando em um Map //recupera a chave e valor for key, value := range m { fmt.Printf("key %s, value %gn", key, value) } //recupera a chave for key := range m { fmt.Printf("key %s, value %gn", key, m[value]) }
  • 40. Apresentação da Agenda Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas
  • 41. Introdução Struct •  Customização de tipos; •  Uma analogia a classe no Java; type Pessoa struct { nome, cpf string; } var p Pessoa; p.nome = "Paula"; p.cpf = "9874458147"; outro := Pessoa { Ana , 213123131 }
  • 42. Introdução Struct e Ponteiros p Pessoa := Pessoa{"Carlos", "154548484"}; ref := new (Pessoa); //ponteiro ref = &p; fmt.Print((*ref).nome)
  • 43. Introdução Struct, anonymous field - Relacionamento type Endereco struct { logradouro, cep string; } type Pessoa struct { nome, cpf string; Endereco; } p := Pessoa{ Endereco{ "Av. Bernardino","09789-111 }, "Ana", "1959478766" };
  • 44. Introdução Métodos •  Declarado fora do struct; •  Pode ser criado para qualquer type; func (p *Pessoa) formata() string { return nome; } p := &Pessoa{ "Gustavo", "9809890078" } fmt.Print(p.formata());
  • 45. Introdução Métodos Customizando método em um array de int: type arrayInt [ ]int; //type func (v arrayInt) Sum() (s int) { for i, x := range v { s += x } //return vazio return } fmt.Print(arrayInt{10, 5, 7}.Sum());
  • 46. Introdução Interface •  Tipo totalmente abstrato, conceito próximo ao do Java type Formatador interface { formata() string }; var f Formatador; f := &Pessoa{"Carlos", "154548484"}; fmt.Print(f.formata()); type MeuInt int32; func (i MeuInt) formata () string { return string(i) } f = MeuInt(100);
  • 47. Apresentação da Agenda Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas
  • 48. Introdução Módulos Todo código GO é organizado em pacotes: fmt à implementa funções para formtação de I/O; os à provê uma abstração para o sistema operacional; math à algumas constantes e funcionalidades matemáticas; http à implementa parse de requisição e respostas http; io à prove interface básica para manipulação I/O; reflect à funcionalidades para reflexão; time à funcionalidades para manipular e exibir informações de tempo; outros ...
  • 49. Apresentação da Agenda Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas
  • 50. Introdução Goroutines •  É a terminologia do GO para um processo concorrente, a Thread do Java; •  Aciona uma função/método de forma assíncrona; func preparar(conteudo string, segundos int32) { time.Sleep(minutos*1e9); fmt.Println(conteudo," pronto!"); } go preparar("feijoada", 10); go preparar("cafe", 5); fmt.Println("aguardando ...");
  • 51. Apresentação da Agenda Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas
  • 52. Introdução O que mais? •  Documentação •  Godoc - gerador de documentação html, assim como o javadoc; •  Gofmt - formata o comentário para impressão; •  Testes •  Crie arquivos para testes unitários com sufixo *_test.go; •  Defina as funções de teste com o prefixo TestXxx(t *testing.T) •  Execute o gotest
  • 53. Introdução Dificuldades •  Ambiente de desenvolvimento: IDE e Debug; •  Bibliotecas e ferramentas ainda recentes; •  Integração com Banco de Dados; •  Comunidade pequena;
  • 54. Introdução Sites http://golang.org http://twitter.com/edermag http://twitter.com/globalcode eder@yaw.com.br
  • 55. Apresentação da Agenda Agenda •  Motivação •  Configurar ambiente •  Primeiro Exemplo •  Estrutura da linguagem •  Funções •  Valores Compostos •  Customizando Tipos •  Módulos •  Execução concorrente •  Utilitários e Dificuldades •  Perguntas