Ricardo Felipe Leandro Saori Jennifer Language.

59
Ricardo Felipe Leandro Saori Jennifer http://golang.org Language

Transcript of Ricardo Felipe Leandro Saori Jennifer Language.

Page 1: Ricardo Felipe Leandro Saori Jennifer  Language.

Ricardo

FelipeLeandro

Saori

Jennifer

http://golang.org

Language

Page 2: Ricardo Felipe Leandro Saori Jennifer  Language.

Índice

- Introdução- História

- Observações iniciais- Moderno x Antigo

- GO- Básico- Orientação a objetos- Algoritmo Exemplo

- Conclusão- Refêrencia

http://golang.org

Page 3: Ricardo Felipe Leandro Saori Jennifer  Language.

Índice

- Introdução- História

- Observações iniciais- Moderno x Antigo

- GO- Básico- Orientação a objetos- Algoritmo Exemplo

- Conclusão- Refêrencia

http://golang.org

Page 4: Ricardo Felipe Leandro Saori Jennifer  Language.

Introdução

Neste seminário, mostraremos a Linguagem GO abordando seus principais aspectos e caracteristicas que julgamos importante para seu diferencial em relação as linguagens até então conhecidas.Para o melhor entedimento usaremos comparações com as linguagens C e Java.

http://golang.org

Page 5: Ricardo Felipe Leandro Saori Jennifer  Language.

Índice

- Introdução- História

- Observações iniciais- Moderno x Antigo

- GO- Básico- Orientação a objetos- Algoritmo Exemplo

- Conclusão- Refêrencia

http://golang.org

Page 6: Ricardo Felipe Leandro Saori Jennifer  Language.

Como chegamos aqui

Segundo Rob Pike:1) C e Unix tornaram-se dominante nas pesquisas;2) O desejo por uma linguagem de alto-nível levou

a C++, apesar de ter sido um ajuste pobre, possibilitou uma programação de alto nível para Unix;

3) C++ se tornou a principal escolha na indústria e nas pesquisas universitarias;

4) Java surgiu como uma visão mais limpa de C++,5) Pelo final dos anos 90, Java foi escolhida como

linguagem para ensino.

http://golang.org

Page 7: Ricardo Felipe Leandro Saori Jennifer  Language.

Programação se tornou díficil

Essas linguagens são difíceis de usarElas são sutis, complexas e detalhadas.Seu modelo padrão está “sobrevendido” e nós respondemos com add-on como “padrões”(Norvig: os padrões são uma demonstração de fraqueza em uma linguagem.)No entanto, essas linguagens são bem sucedidas e vitais.

http://golang.org

Page 8: Ricardo Felipe Leandro Saori Jennifer  Language.

Índice

- Introdução- História

- Observações iniciais- Moderno x Antigo

- GO- Básico- Orientação a objetos- Algoritmo Exemplo- Conclusão

- Conclusão- Refêrencia

http://golang.org

Page 9: Ricardo Felipe Leandro Saori Jennifer  Language.

Reação

A falta de jeito das principais linguagens causou uma reação: uma série de sucessos de linguagens mais simples (Python, Ruby, Lua, Java Script, Erlang…).Isso demonstra a insatisfação com o modelo padrão e a abordagem, cada vez mais popular, do novo modelo.

http://golang.org

Page 10: Ricardo Felipe Leandro Saori Jennifer  Language.

As vantagens

As linguagens padrões são muito fortes: type-safe, eficazes e eficientesNas mãos de especialistas, elas são ótimasGrandes sistemas e grandes empresas são construídas em cima delasNa prática, elas funcionam bem para programação em grande escala: programas de grande porte e número alto de programadores.

http://golang.org

Page 11: Ricardo Felipe Leandro Saori Jennifer  Language.

As desvantagens

As linguagens padrões são difíceis de usarCompiladores são lentos e exigentes. Binários são enormes.Muitos programadores preferem evitá-las.As linguagens tem, pelo menos, 10 anos de idade e são mal adaptadas para os ambientes atuais ( multicores, nuvens de rede).

http://golang.org

Page 12: Ricardo Felipe Leandro Saori Jennifer  Language.

Qual seria o ideal ?

Manter as vantagens e evitar as desvantagens ( ÓBVIO!!!!) :- A sensação de uma linguagem dinâmica

com a segurança de um sistema estático;- Compilação rápida;- Tempo de execução real que suporta GC;- Leve, sistema flexível;- Possui métodos, mas não é uma

linguagem OO convencional.

http://golang.org

Page 13: Ricardo Felipe Leandro Saori Jennifer  Language.

Índice

- Introdução- História

- Observações iniciais- Moderno x Antigo

- GO- Básico- Orientação a objetos- Algoritmo Exemplo

- Conclusão- Refêrencia

http://golang.org

Page 14: Ricardo Felipe Leandro Saori Jennifer  Language.

Hello World!

Em C:

#include <stdio.h>

int main(){printf("Hello World!");return 0;

}http://golang.org

Page 15: Ricardo Felipe Leandro Saori Jennifer  Language.

Hello World!

Em Java:

public class Main {

public static void main(String[] args) { System.out.print("Hello World!"); }

}http://golang.org

Page 16: Ricardo Felipe Leandro Saori Jennifer  Language.

Hello World!

Em Ruby:

puts “Hello World!”

http://golang.org

Page 17: Ricardo Felipe Leandro Saori Jennifer  Language.

Hello World!

Em Go:

import "fmt"

func main() {fmt.Print("Hello World!")

}

http://golang.org

Page 18: Ricardo Felipe Leandro Saori Jennifer  Language.

Γειά σου Κόσμε!"

Em Go:

import "fmt"

func main() {fmt.Print("Γειά σου Κόσμε!")

}

http://golang.org

Page 19: Ricardo Felipe Leandro Saori Jennifer  Language.

こんにちは、世界!Em Go:

import "fmt"

func main() {fmt.Print("こんにちは、世界! ")

}

http://golang.org

Page 20: Ricardo Felipe Leandro Saori Jennifer  Language.

Básico da Linguagem

É baseada em C com participação da família Pascal / Modula / Oberon (declarações, pacotes), além de algumas idéias de linguagens inspiradas por Tony Hoare (simultaneidade)

http://golang.org

Page 21: Ricardo Felipe Leandro Saori Jennifer  Language.

VáriaveisDeclarações: muito parecidas com C, mas de forma invertida, várias formas de declaração para se adequar ao uso da váriavel em questão

// Forma completavar variável_A1 int    = 10var variável_A2 string = "dez“// Forma menos abreviadavar variável_B1 = 20 var variável_B2 = "vinte“// Forma mais abreviada (variáveis locais apenas)variável_C1 := 30variável_C2 := "trinta“variável_C3 := uint64(10)//Atribuição múltiplax, y, z := 10, 10.0, "dez"

http://golang.org

Page 22: Ricardo Felipe Leandro Saori Jennifer  Language.

Váriaveis

Tipos numéricos: uso de palavras intuitivas, sem conversões implicitas ( int != int32)

http://golang.org

Page 23: Ricardo Felipe Leandro Saori Jennifer  Language.

Váriaveis

Booleanos: o tipo bool pode assumir os valores true ou false, o operador if usa apenas expressões booleanas, ponteiros e inteiros não são booleanos.

Go:var a bool = 2<3var b bool = false

http://golang.org

Page 24: Ricardo Felipe Leandro Saori Jennifer  Language.

Estruturas de controleIf: if x > 0 { // código }

For: Go a implementa for de forma mais genérica e flexível que o usual.

// Como o for do Cfor inicial; condição; final { /* código */ }// Como o while do Cfor condição { /* código */ }// Loop, como o for(;;) do Cfor { /* código */ }// Percorrer uma listafor c, v := range lista {// c = chave (key), v = valor}

http://golang.org

Page 25: Ricardo Felipe Leandro Saori Jennifer  Language.

Estruturas de controle

Switch: É geralmente usado para testagens massivas sobre um mesmo objeto/valor, porém Go permite o uso mais amplo também nesse caso. Algo a ser testado pode tanto ser um valor simples quanto um objeto complexo e para cada case pode-se fazer mais de um teste.

switch algo {default:/* código */case "A", "B", "C":/* código */case "1", "2", "3":/* código */}

http://golang.org

Page 26: Ricardo Felipe Leandro Saori Jennifer  Language.

Funções

Podem retornar valores de diferentes tipos.

func MySqrt(f float64) (float64, bool) {if f >= 0 { return math.Sqrt(f), true }return 0, false}

http://golang.org

Page 27: Ricardo Felipe Leandro Saori Jennifer  Language.

Funções

Um simples return retorna os valores default das váriaveis de retorno

func MySqrt(f float64) (v float64, ok bool) {if f >= 0 { v,ok = math.Sqrt(f), true }return // return 0, false}

http://golang.org

Page 28: Ricardo Felipe Leandro Saori Jennifer  Language.

Índice

- Introdução- História

- Observações iniciais- Moderno x Antigo

- GO- Básico- Orientação a objetos- Algoritmo Exemplo

- Conclusão- Refêrencia

http://golang.org

Page 29: Ricardo Felipe Leandro Saori Jennifer  Language.

Orientação a objetosResumo: OO é um tipo especial de "empacotamento" de código no qual um contexto é logicamente isolado do restante e tratado em termos de input e output.

import "fmt"type MinhaEstrutura struct { nome string número int}func (minha *MinhaEstrutura) ImprimaNomeENúmero() { fmt.Printf("Nome:\t%s\nNúmero:\t%d\n", minha.nome, minha.número)}func main() { m := new(MinhaEstrutura) m.nome = "Fulano" m.número = 10 m.ImprimaNomeENúmero()}

http://golang.org

Page 30: Ricardo Felipe Leandro Saori Jennifer  Language.

Orientação a objetos

http://golang.org

• Classe: representa um conjunto de objetos com características afins.

• (mais especialmente uma interface)

Page 31: Ricardo Felipe Leandro Saori Jennifer  Language.

Orientação a objetos

• Go não é realmente orientado a objetos

• Não tem herança• Logo não tem polimorfismo

• Apenas utiliza alguns conceitos• Interface

http://golang.org

Page 32: Ricardo Felipe Leandro Saori Jennifer  Language.

Orientação a objetos (Java)

public class C1 /*extendsObject*/{ //lista de atributos //construtor //metodos //classes internas}

http://golang.org

Page 33: Ricardo Felipe Leandro Saori Jennifer  Language.

Orientação a objetos

• Em java um método geralmente altera os atributos da própria classe.

• E se tivermos a necessidade de utilizar um tipo especial de dados mas a linguagem não oferecer suporte?

http://golang.org

Page 34: Ricardo Felipe Leandro Saori Jennifer  Language.

Orientação a objetos

Em C quando queremos definir um tipo diferente de dados utilizamos o typedef

typedef struct A { ... } A;

main(){... A *a = (A*)malloc(sizeof(A)); ...}

http://golang.org

Page 35: Ricardo Felipe Leandro Saori Jennifer  Language.

Orientação a objetos (C)

E para manipularmos este novo tipo?

void add(A* a, int i){ ... //aqui dentro manipulamos “a”..}

http://golang.org

Page 36: Ricardo Felipe Leandro Saori Jennifer  Language.

Orientação a objetos (C)

O que você mais odeia em C quando esta lidando com tipos novos de dados?

http://golang.org

Page 37: Ricardo Felipe Leandro Saori Jennifer  Language.

Orientação a objetos (C)

O que você mais odeia em C quando esta lidando com tipos novos de dados?

Passar a variável a ser manipulada como parâmetro?

http://golang.org

Page 38: Ricardo Felipe Leandro Saori Jennifer  Language.

Orientação a objetos

Orientação a objetos resolveria isso!

a.add(i);

Simples assim!

http://golang.org

Page 39: Ricardo Felipe Leandro Saori Jennifer  Language.

“Orientação a objetos” (Go)

Em go não existe classe!

Mas existe interface...

type A interface { add(i int) ...}

http://golang.org

Page 40: Ricardo Felipe Leandro Saori Jennifer  Language.

“Orientação a objetos” (Go)

Mas em quem a função add(int) vai agir?

http://golang.org

Page 41: Ricardo Felipe Leandro Saori Jennifer  Language.

“Orientação a objetos” (Go)

Interfaces não contém o código propriamente dito, são apenas “assinaturas”.

Go permite ao programador especificar em quem um método ira agir sem a passagem de parâmetro.

http://golang.org

Page 42: Ricardo Felipe Leandro Saori Jennifer  Language.

“Orientação a objetos” (Go)

func (a *A) add(i int){ a.valor = i}

Deste modo a função add funciona apenas ao tipo de estrutura “A”, como se fosse uma orientação a objetos sem todos aqueles conceitos(chatos).

http://golang.org

Page 43: Ricardo Felipe Leandro Saori Jennifer  Language.

Orientação a objetos

http://golang.org

// retorna um ponteiro para uma nova variável

Page 44: Ricardo Felipe Leandro Saori Jennifer  Language.

as funões add(int) e

max() são aplicáveis

apenas ao tipo *arv

Page 45: Ricardo Felipe Leandro Saori Jennifer  Language.

E onde entra a interface na história?

Page 46: Ricardo Felipe Leandro Saori Jennifer  Language.

Nossa estrutura criada obedece estas três interfaces pois existem os métodos add(int) e max() que são aplicáveis a ela.

Page 47: Ricardo Felipe Leandro Saori Jennifer  Language.

• Repare que a função não recebeu nossa estrutura criada, mas sim a interface... Esta função sabe trabalhar com quaisquer tipos de dados que satisfaçam a interface “arvore”

Page 48: Ricardo Felipe Leandro Saori Jennifer  Language.
Page 49: Ricardo Felipe Leandro Saori Jennifer  Language.

Índice

- Introdução- História

- Observações iniciais- Moderno x Antigo

- GO- Básico- Orientação a objetos- Algoritmo Exemplo

- Conclusão- Refêrencia

http://golang.org

Page 50: Ricardo Felipe Leandro Saori Jennifer  Language.

Quick Sort(Java)

public static void quick_sort(int []v,int ini, int fim){ int meio; if(ini<fim){ meio = partition(v,ini,fim); quick_sort(v,ini,meio); quick_sort(v,meio+1,fim); } }

http://golang.org

Page 51: Ricardo Felipe Leandro Saori Jennifer  Language.

Quick Sort(Java)

public static int partition(int []v, int ini, int fim){ int pivo, topo,i; pivo = v[ini]; topo = ini; for(i=ini+1;i<fim;i++){ if(v[i]<pivo){ v[topo]=v[i]; v[i]=v[topo+1]; topo++; } } v[topo]=pivo; return topo; }

http://golang.org

Page 52: Ricardo Felipe Leandro Saori Jennifer  Language.

Quick Sort(Java + Go)

func quick_sort(v []int,ini, fim int){ var meio int if ini<fim { meio = partition(v,ini,fim) quick_sort(v,ini,meio) quick_sort(v,meio+1,fim) }}

http://golang.org

Page 53: Ricardo Felipe Leandro Saori Jennifer  Language.

Quick Sort(Java + Go)

func partition(v []int,ini, fim int) int{ var pivo, topo, i int pivo = v[ini] topo = ini for i=ini+1; i<fim; i++ { if(v[i]<pivo){ v[topo]=v[i] v[i]=v[topo+1] topo++ } } v[topo]=pivo return topo}

http://golang.org

Page 54: Ricardo Felipe Leandro Saori Jennifer  Language.

Quick Sort(Go)

func quick_sort(v []int){ var meio int if 0<len(v)-1 { meio = partition(v) quick_sort(v[0:meio]) quick_sort(v[meio+1:len(v)]) }}

http://golang.org

Page 55: Ricardo Felipe Leandro Saori Jennifer  Language.

Quick Sort(Go)

func partition(v []int) int{ var pivo, topo, i int pivo = v[0] topo = 0 for i=1; i< len(v); i++ { if(v[i]<pivo){ v[topo]=v[i] v[i]=v[topo+1] topo++ } } v[topo]=pivo return topo}

http://golang.org

Page 56: Ricardo Felipe Leandro Saori Jennifer  Language.

Índice

- Introdução- História

- Observações iniciais- Moderno x Antigo

- GO- Básico- Orientação a objetos- Algoritmo Exemplo

- Conclusão- Refêrencia

http://golang.org

Page 57: Ricardo Felipe Leandro Saori Jennifer  Language.

Conclusão

- Linguagem muito imatura;- É baseada na arquitetura atual (Von

Neumann) o que a torna mais próxima do paradgima imperativo;

- Pouco mais produtiva que C;- Tenta dar uma falsa impressão de

flexibilidade.

http://golang.org

Page 58: Ricardo Felipe Leandro Saori Jennifer  Language.

Índice

- Introdução- História

- Observações iniciais- Moderno x Antigo

- GO- Básico- Orientação a objetos- Algoritmo Exemplo

- Conclusão- Refêrencia

http://golang.org

Page 59: Ricardo Felipe Leandro Saori Jennifer  Language.

Referência

- https:// sites.google.com/a/danielmazza.info/tutorial/go

- http://golang.org/doc/effective_go.html

- “100428-pike-stanford”- Go Course Day (1, 2 e 3)

http://golang.org