diff options
Diffstat (limited to 'pt-br')
| -rw-r--r-- | pt-br/c-pt.html.markdown | 71 | ||||
| -rw-r--r-- | pt-br/css-pt.html.markdown | 8 | ||||
| -rw-r--r-- | pt-br/java-pt.html.markdown | 213 | ||||
| -rw-r--r-- | pt-br/javascript-pt.html.markdown | 9 | ||||
| -rw-r--r-- | pt-br/json-pt.html.markdown | 15 | ||||
| -rw-r--r-- | pt-br/matlab-pt.html.markdown | 540 | ||||
| -rw-r--r-- | pt-br/ruby-pt.html.markdown | 12 | ||||
| -rw-r--r-- | pt-br/sass-pt.html.markdown | 27 | 
8 files changed, 818 insertions, 77 deletions
| diff --git a/pt-br/c-pt.html.markdown b/pt-br/c-pt.html.markdown index 43688724..2c274f12 100644 --- a/pt-br/c-pt.html.markdown +++ b/pt-br/c-pt.html.markdown @@ -7,29 +7,30 @@ contributors:  translators:      - ["João Farias", "https://github.com/JoaoGFarias"]      - ["Elton Viana", "https://github.com/eltonvs"] +    - ["Cássio Böck", "https://github.com/cassiobsilva"]  lang: pt-br  filename: c-pt.el  ---  Ah, C. Ainda é **a** linguagem de computação de alta performance. -C é a liguangem de mais baixo nível que a maioria dos programadores -irão usar, e isso dá a ela uma grande velocidade bruta. Apenas fique -antento que este manual de gerenciamento de memória e C vai levanter-te -tão longe quanto você precisa.  +C é a linguagem de mais baixo nível que a maioria dos programadores +utilizarão, e isso dá a ela uma grande velocidade bruta. Apenas fique +atento se este manual de gerenciamento de memória e C vai te levar +tão longe quanto precisa.  ```c  // Comentários de uma linha iniciam-se com // - apenas disponível a partir do C99  /* -Comentários de multiplas linhas se parecem com este.  +Comentários de múltiplas linhas se parecem com este.  Funcionam no C89 também.  */  // Constantes: #define <palavra-chave>  #definie DAY_IN_YEAR 365 -//enumarações também são modos de definir constantes. +//enumerações também são modos de definir constantes.  enum day {DOM = 1, SEG, TER, QUA, QUI, SEX, SAB};  // SEG recebe 2 automaticamente, TER recebe 3, etc. @@ -54,13 +55,13 @@ int soma_dois_ints(int x1, int x2); // protótipo de função  // O ponto de entrada do teu programa é uma função  // chamada main, com tipo de retorno inteiro  int main() { -	// Usa-se printf para escrever na tela,  +	// Usa-se printf para escrever na tela,  	// para "saída formatada"  	// %d é um inteiro, \n é uma nova linha      printf("%d\n", 0); // => Imprime 0  	// Todos as declarações devem acabar com  	// ponto e vírgula -	 +      ///////////////////////////////////////      // Tipos      /////////////////////////////////////// @@ -78,7 +79,7 @@ int main() {      // longs tem entre 4 e 8 bytes; longs long tem garantia      // de ter pelo menos 64 bits      long x_long = 0; -    long long x_long_long = 0;  +    long long x_long_long = 0;      // floats são normalmente números de ponto flutuante  	// com 32 bits @@ -93,7 +94,7 @@ int main() {      unsigned int ux_int;      unsigned long long ux_long_long; -	// caracteres dentro de aspas simples são inteiros  +	// caracteres dentro de aspas simples são inteiros  	// no conjunto de caracteres da máquina.      '0' // => 48 na tabela ASCII.      'A' // => 65 na tabela ASCII. @@ -104,7 +105,7 @@ int main() {  	// Se o argumento do operador `sizeof` é uma expressão, então seus argumentos  	// não são avaliados (exceto em VLAs (veja abaixo)). -	// O valor devolve, neste caso, é uma constante de tempo de compilação.  +	// O valor devolve, neste caso, é uma constante de tempo de compilação.      int a = 1;  	// size_t é um inteiro sem sinal com pelo menos 2 bytes que representa  	// o tamanho de um objeto. @@ -120,7 +121,7 @@ int main() {  	// Você pode inicializar um array com 0 desta forma:      char meu_array[20] = {0}; -	// Indexar um array é semelhante a outras linguages +	// Indexar um array é semelhante a outras linguagens  	// Melhor dizendo, outras linguagens são semelhantes a C      meu_array[0]; // => 0 @@ -129,7 +130,7 @@ int main() {      printf("%d\n", meu_array[1]); // => 2  	// No C99 (e como uma features opcional em C11), arrays de tamanho variável -	// VLA (do inglês), podem ser declarados também. O tamanho destes arrays  +	// VLA (do inglês), podem ser declarados também. O tamanho destes arrays  	// não precisam ser uma constante de tempo de compilação:      printf("Entre o tamanho do array: "); // Pergunta ao usuário pelo tamanho      char buf[0x100]; @@ -144,14 +145,14 @@ int main() {      // > Entre o tamanho do array: 10      // > sizeof array = 40 -	// String são apenas arrays de caracteres terminados por um  +	// String são apenas arrays de caracteres terminados por um  	// byte nulo (0x00), representado em string pelo caracter especial '\0'.  	// (Não precisamos incluir o byte nulo em literais de string; o compilador  	// o insere ao final do array para nós.) -    char uma_string[20] = "Isto é uma string";  +    char uma_string[20] = "Isto é uma string";  	// Observe que 'é' não está na tabela ASCII  	// A string vai ser salva, mas a saída vai ser estranha -	// Porém, comentários podem conter acentos  +	// Porém, comentários podem conter acentos      printf("%s\n", uma_string); // %s formata a string      printf("%d\n", uma_string[17]); // => 0 @@ -175,7 +176,7 @@ int main() {      ///////////////////////////////////////      // Atalho para multiplas declarações: -    int i1 = 1, i2 = 2;  +    int i1 = 1, i2 = 2;      float f1 = 1.0, f2 = 2.0;      int a, b, c; @@ -206,7 +207,7 @@ int main() {      2 <= 2; // => 1      2 >= 2; // => 1 -	// C não é Python - comparações não se encadeam. +	// C não é Python - comparações não se encadeiam.      int a = 1;      // Errado:      int entre_0_e_2 = 0 < a < 2; @@ -231,7 +232,7 @@ int main() {      char *s = "iLoveC";      int j = 0;      s[j++]; // => "i". Retorna o j-ésimo item de s E DEPOIS incrementa o valor de j. -    j = 0;  +    j = 0;      s[++j]; // => "L". Incrementa o valor de j. E DEPOIS retorna o j-ésimo item de s.      // o mesmo com j-- e --j @@ -308,7 +309,7 @@ int main() {          exit(-1);          break;      } -     +      ///////////////////////////////////////      // Cast de tipos @@ -327,8 +328,8 @@ int main() {  	// Tipos irão ter overflow sem aviso      printf("%d\n", (unsigned char) 257); // => 1 (Max char = 255 se char tem 8 bits) -	// Para determinar o valor máximo de um `char`, de um `signed char` e de  -	// um `unisigned char`, respectivamente, use as macros CHAR_MAX, SCHAR_MAX  +	// Para determinar o valor máximo de um `char`, de um `signed char` e de +	// um `unisigned char`, respectivamente, use as macros CHAR_MAX, SCHAR_MAX  	// e UCHAR_MAX de <limits.h>  	// Tipos inteiros podem sofrer cast para pontos-flutuantes e vice-versa. @@ -341,7 +342,7 @@ int main() {      ///////////////////////////////////////  	// Um ponteiro é uma variável declarada para armazenar um endereço de memória. -	// Seu declaração irá também dizer o tipo de dados para o qual ela aponta. Você +	// Sua declaração irá também dizer o tipo de dados para o qual ela aponta. Você  	// Pode usar o endereço de memória de suas variáveis, então, brincar com eles.      int x = 0; @@ -363,13 +364,13 @@ int main() {      printf("%d\n", *px); // => Imprime 0, o valor de x  	// Você também pode mudar o valor que o ponteiro está apontando. -	// Teremo que cercar a de-referência entre parenteses, pois +	// Temos que cercar a de-referência entre parênteses, pois  	// ++ tem uma precedência maior que *.      (*px)++; // Incrementa o valor que px está apontando por 1      printf("%d\n", *px); // => Imprime 1      printf("%d\n", x); // => Imprime 1 -	// Arrays são um boa maneira de alocar um bloco contínuo de memória +	// Arrays são uma boa maneira de alocar um bloco contínuo de memória      int x_array[20]; // Declara um array de tamanho 20 (não pode-se mudar o tamanho      int xx;      for (xx = 0; xx < 20; xx++) { @@ -379,7 +380,7 @@ int main() {  	// Declara um ponteiro do tipo int e inicialize ele para apontar para x_array      int* x_ptr = x_array;  	// x_ptr agora aponta para o primeiro elemento do array (o inteiro 20). -	// Isto funciona porque arrays são apenas ponteiros para seu primeiros elementos. +	// Isto funciona porque arrays são apenas ponteiros para seus primeiros elementos.  	// Por exemplo, quando um array é passado para uma função ou é atribuído a um  	// ponteiro, ele transforma-se (convertido implicitamente) em um ponteiro.  	// Exceções: quando o array é o argumento de um operador `&` (endereço-de): @@ -395,7 +396,7 @@ int main() {      printf("%zu, %zu\n", sizeof arr, sizeof ptr); // provavelmente imprime "40, 4" ou "40, 8"  	// Ponteiros podem ser incrementados ou decrementados baseado no seu tipo -	// (isto é chamado aritimética de ponteiros +	// (isto é chamado aritmética de ponteiros      printf("%d\n", *(x_ptr + 1)); // => Imprime 19      printf("%d\n", x_array[1]); // => Imprime 19 @@ -413,9 +414,9 @@ int main() {  	// "resultados imprevisíveis" - o programa é dito ter um "comportamento indefinido"      printf("%d\n", *(my_ptr + 21)); // => Imprime quem-sabe-o-que? Talvez até quebre o programa. -	// Quando termina-se de usar um bloco de memória alocado, você pode liberá-lo, +	// Quando se termina de usar um bloco de memória alocado, você pode liberá-lo,  	// ou ninguém mais será capaz de usá-lo até o fim da execução -	// (Isto cham-se "memory leak"): +	// (Isto chama-se "memory leak"):      free(my_ptr);  	// Strings são arrays de char, mas elas geralmente são representadas @@ -537,7 +538,7 @@ int area(retan r)      return r.largura * r.altura;  } -// Se você tiver structus grande, você pode passá-las "por ponteiro"  +// Se você tiver structus grande, você pode passá-las "por ponteiro"  // para evitar cópia de toda a struct:  int area(const retan *r)  { @@ -554,8 +555,8 @@ conhecidos. Ponteiros para funções são como qualquer outro ponteiro  diretamente e passá-las para por toda parte.  Entretanto, a sintaxe de definição por ser um pouco confusa. -Exemplo: use str_reverso através de um ponteiro  -*/	 +Exemplo: use str_reverso através de um ponteiro +*/  void str_reverso_através_ponteiro(char *str_entrada) {      // Define uma variável de ponteiro para função, nomeada f.      void (*f)(char *); //Assinatura deve ser exatamente igual à função alvo. @@ -575,7 +576,7 @@ typedef void (*minha_função_type)(char *);  // Declarando o ponteiro:  // ... -// minha_função_type f;  +// minha_função_type f;  //Caracteres especiais:  '\a' // Alerta (sino) @@ -586,7 +587,7 @@ typedef void (*minha_função_type)(char *);  '\r' // Retorno de carroça  '\b' // Backspace  '\0' // Caracter nulo. Geralmente colocado ao final de string em C. -     //   oi\n\0. \0 é usado por convenção para marcar o fim da string.  +     //   oi\n\0. \0 é usado por convenção para marcar o fim da string.  '\\' // Barra invertida  '\?' // Interrogação  '\'' // Aspas simples @@ -606,7 +607,7 @@ typedef void (*minha_função_type)(char *);  "%p"    // ponteiro  "%x"    // hexadecimal  "%o"    // octal -"%%"    // imprime %  +"%%"    // imprime %  ///////////////////////////////////////  // Ordem de avaliação diff --git a/pt-br/css-pt.html.markdown b/pt-br/css-pt.html.markdown index ed6f6c4c..b1fbd961 100644 --- a/pt-br/css-pt.html.markdown +++ b/pt-br/css-pt.html.markdown @@ -159,11 +159,11 @@ seletor {      color: # FF66EE; /* Formato hexadecimal longo */      color: tomato; /* Uma cor nomeada */      color: rgb (255, 255, 255); /* Como valores rgb */ -    cor: RGB (10%, 20%, 50%); /* Como porcentagens rgb */ -    cor: rgba (255, 0, 0, 0,3); /* Como valores RGBA (CSS 3) NOTA: 0 <a <1 */ +    color: RGB (10%, 20%, 50%); /* Como porcentagens rgb */ +    color: rgba (255, 0, 0, 0,3); /* Como valores RGBA (CSS 3) NOTA: 0 <a <1 */      color: transparent; /* Equivale a definir o alfa a 0 */ -    cor: HSL (0, 100%, 50%); /* Como porcentagens HSL (CSS 3) */ -    cor: HSLA (0, 100%, 50%, 0,3); /* Como porcentagens HSLA com alfa */ +    color: HSL (0, 100%, 50%); /* Como porcentagens HSL (CSS 3) */ +    color: HSLA (0, 100%, 50%, 0,3); /* Como porcentagens HSLA com alfa */      /* Imagens como fundos de elementos */      background-image: url (/img-path/img.jpg); /* Citações dentro url () opcional */ diff --git a/pt-br/java-pt.html.markdown b/pt-br/java-pt.html.markdown index a884f273..3c9512aa 100644 --- a/pt-br/java-pt.html.markdown +++ b/pt-br/java-pt.html.markdown @@ -405,6 +405,219 @@ class Velocipede extends Bicicleta {  } +// Interfaces +// Sintaxe de declaração de Interface +// <nível de acesso> Interface <nome-da-interface> extends <super-interfaces> { +// // Constantes +// // Declarações de método +//} + +// Exemplo - Comida: +public interface Comestivel { +    public void comer(); // Qualquer classe que implementa essa interface, deve +                        // Implementar este método. +} + +public interface Digestivel { +    public void digerir(); +} + + +// Agora podemos criar uma classe que implementa ambas as interfaces. +public class Fruta implements Comestivel, Digestivel { + +    @Override +    public void comer() { +        // ... +    } + +    @Override +    public void digerir() { +        // ... +    } +} + +// Em Java, você pode estender somente uma classe, mas você pode implementar muitas +// Interfaces. Por exemplo: +public class ClasseExemplo extends ExemploClassePai implements InterfaceUm, +    InterfaceDois { + +    @Override +    public void InterfaceUmMetodo() { +    } + +    @Override +    public void InterfaceDoisMetodo() { +    } + +} + +// Classes abstratas + +// Sintaxe de declaração de classe abstrata +// <Nível de acesso> abstract <nome-da-classe-abstrata> extends <estende super-abstratas-classes> { +// // Constantes e variáveis +// // Declarações de método +//} + +// Marcar uma classe como abstrata significa que ela contém métodos abstratos que devem +// ser definido em uma classe filha. Semelhante às interfaces, classes abstratas não podem +// ser instanciadas, ao invés disso devem ser extendidas e os métodos abstratos +// definidos. Diferente de interfaces, classes abstratas podem conter uma mistura de +// métodos concretos e abstratos. Métodos em uma interface não podem ter um corpo, +// a menos que o método seja estático, e as variáveis sejam finais, por padrão, ao contrário de um +// classe abstrata. Classes abstratas também PODEM ter o método "main". + +public abstract class Animal +{ +    public abstract void fazerSom(); + +    // Método pode ter um corpo +    public void comer() +    { +        System.out.println("Eu sou um animal e estou comendo.");   +        //Nota: Nós podemos acessar variáveis privadas aqui. +        idade = 30; +    } + +    // Não há necessidade de inicializar, no entanto, em uma interface +    // a variável é implicitamente final e, portanto, tem +    // de ser inicializado. +    protected int idade; + +    public void mostrarIdade() +    { +        System.out.println(idade);   +    } + +    //Classes abstratas podem ter o método main. +    public static void main(String[] args) +    { +        System.out.println("Eu sou abstrata"); +    } +} + +class Cachorro extends Animal +{ + +    // Nota: ainda precisamos substituir os métodos abstratos na +    // classe abstrata +    @Override +    public void fazerSom() +    { +        System.out.println("Bark"); +        // idade = 30;    ==> ERRO!  idade é privada de Animal +    } + +    // NOTA: Você receberá um erro se usou a +    // anotação Override aqui, uma vez que java não permite +    // sobrescrita de métodos estáticos. +    // O que está acontecendo aqui é chamado de "esconder o método". +    // Vejá também este impressionante SO post: http://stackoverflow.com/questions/16313649/ +    public static void main(String[] args) +    { +        Cachorro pluto = new Cachorro(); +        pluto.fazerSom(); +        pluto.comer(); +        pluto.mostrarIdade(); +    } +} + +// Classes Finais + +// Sintaxe de declaração de classe final +// <nível de acesso> final <nome-da-classe-final> { +// // Constantes e variáveis +// // Declarações de método +//} + +// Classes finais são classes que não podem ser herdadas e são, portanto, um +// filha final. De certa forma, as classes finais são o oposto de classes abstratas +// Porque classes abstratas devem ser estendidas, mas as classes finais não pode ser +// estendidas. +public final class TigreDenteDeSabre extends Animal +{ +    // Nota: Ainda precisamos substituir os métodos abstratos na +     // classe abstrata. +    @Override +    public void fazerSom(); +    { +        System.out.println("Roar"); +    } +} + +// Métodos Finais +public abstract class Mamifero() +{ +    // Sintaxe de Métodos Finais: +    // <modificador-de-acesso> final <tipo-de-retorno> <nome-do-método>(<argumentos>) + +    // Métodos finais, como, classes finais não podem ser substituídas por uma classe filha, +    // e são, portanto, a implementação final do método. +    public final boolean EImpulsivo() +    { +        return true; +    } +} + + +// Tipo Enum +// +// Um tipo enum é um tipo de dado especial que permite a uma variável ser um conjunto de constantes predefinidas. A  +// variável deve ser igual a um dos valores que foram previamente definidos para ela. +// Por serem constantes, os nomes dos campos de um tipo de enumeração estão em letras maiúsculas. +// Na linguagem de programação Java, você define um tipo de enumeração usando a palavra-chave enum. Por exemplo, você poderia +// especificar um tipo de enum dias-da-semana como: + +public enum Dia { +    DOMINGO, SEGUNDA, TERÇA, QUARTA, +    QUINTA, SEXTA, SABADO  +} + +// Nós podemos usar nosso enum Dia assim: + +public class EnumTeste { + +    // Variável Enum +    Dia dia; + +    public EnumTeste(Dia dia) { +        this.dia = dia; +    } + +    public void digaComoE() { +        switch (dia) { +            case SEGUNDA: +                System.out.println("Segundas são ruins."); +                break; + +            case SEXTA: +                System.out.println("Sextas são melhores."); +                break; + +            case SABADO:  +            case DOMINGO: +                System.out.println("Finais de semana são os melhores."); +                break; + +            default: +                System.out.println("Dias no meio da semana são mais ou menos."); +                break; +        } +    } + +    public static void main(String[] args) { +        EnumTeste primeiroDia = new EnumTeste(Dia.SEGUNDA); +        primeiroDia.digaComoE(); // => Segundas-feiras são ruins. +        EnumTeste terceiroDia = new EnumTeste(Dia.QUARTA); +        terceiroDia.digaComoE(); // => Dias no meio da semana são mais ou menos. +    } +} + +// Tipos Enum são muito mais poderosos do que nós mostramos acima. +// O corpo de um enum pode incluir métodos e outros campos. +// Você pode ver mais em https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html +  ```  ## Leitura Recomendada diff --git a/pt-br/javascript-pt.html.markdown b/pt-br/javascript-pt.html.markdown index 406042fa..59c6890e 100644 --- a/pt-br/javascript-pt.html.markdown +++ b/pt-br/javascript-pt.html.markdown @@ -436,7 +436,6 @@ var myPrototype = {  myObj.__proto__ = myPrototype;  myObj.meaningOfLife; // = 42 -// This works for functions, too.  // Isto funciona para funções, também.  myObj.myFunc(); // = "olá mundo!" @@ -506,7 +505,7 @@ String.prototype.firstCharacter = function(){  // Havíamos mencionado que `Object.create` não estava ainda disponível em   // todos as implementações, mas nós podemos usá-lo com esse polyfill: -if (Object.create === undefined){ // don't overwrite it if it exists +if (Object.create === undefined){ // Não o sobrescreve se já existir      Object.create = function(proto){          // faz um construtor temporário com o prototype certo          var Constructor = function(){}; @@ -520,13 +519,13 @@ if (Object.create === undefined){ // don't overwrite it if it exists  ## Leitura Adicional  O [Mozilla Developer -Network](https://developer.mozilla.org/en-US/docs/Web/JavaScript) dispõe de uma +Network](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript) dispõe de uma  excelente documentação sobre Javascript e seu uso nos browsers. E mais,   é uma wiki, portanto conforme você vai aprendendo, mais você pode ir ajudando  os outros compartilhando do seu conhecimento.  [Uma re-introdução do JavaScript pela MDN] -(https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript) +(https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/A_re-introduction_to_JavaScript)  cobre muito dos conceitos abordados aqui em mais detalhes. Este guia fala  somente sobre a linguagem JavaScript em si; se você quiser aprender mais  sobre e como usar o JavaScript em páginas na web, comece aprendendo sobre @@ -543,5 +542,5 @@ profundo de todas as partes do JavaScript.  / livro de referência.   Parte desse artigo foi adaptado do tutorial de Python do Louie Dinh que está -nesse site e do [Tutorial de JS](https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript) +nesse site e do [Tutorial de JS](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/A_re-introduction_to_JavaScript)  da Mozilla Developer Network. diff --git a/pt-br/json-pt.html.markdown b/pt-br/json-pt.html.markdown index e4f10a61..fd822c03 100644 --- a/pt-br/json-pt.html.markdown +++ b/pt-br/json-pt.html.markdown @@ -3,6 +3,7 @@ language: json  contributors:    - ["Anna Harren", "https://github.com/iirelu"]    - ["Marco Scannadinari", "https://github.com/marcoms"] +  - ["Francisco Marques", "https://github.com/ToFran"]  translators:    - ["Miguel Araújo", "https://github.com/miguelarauj1o"]  lang: pt-br @@ -12,10 +13,16 @@ filename: learnjson-pt.json  Como JSON é um formato de intercâmbio de dados, este será, muito provavelmente, o  "Learn X in Y minutes" mais simples existente. -JSON na sua forma mais pura não tem comentários em reais, mas a maioria dos analisadores  -aceitarão comentários no estilo C (//, /\* \*/). Para os fins do presente, no entanto,  -tudo o que é vai ser 100% JSON válido. Felizmente, isso meio que fala por si. +JSON na sua forma mais pura não tem comentários, mas a maioria dos analisadores  +aceitarão comentários no estilo C (//, /\* \*/). No entanto estes devem ser evitados para otimizar a compatibilidade. +Um valor JSON pode ser um numero, uma string, um array, um objeto, um booleano (true, false) ou null. + +Os browsers suportados são: Firefox 3.5+, Internet Explorer 8.0+, Chrome 1.0+, Opera 10.0+, e Safari 4.0+. + +A extensão dos ficheiros JSON é “.json” e o tipo de mídia de Internet (MIME) é “application/json”. + +Mais informação em: http://www.json.org/  ```json  { @@ -57,6 +64,6 @@ tudo o que é vai ser 100% JSON válido. Felizmente, isso meio que fala por si.    , "outro comentário": "que bom"    }, -  "que foi curto": "E, você está feito. Você já sabe tudo que JSON tem para oferecer.". +  "que foi curto": "E, você está feito. Você já sabe tudo que JSON tem para oferecer."  }  ``` diff --git a/pt-br/matlab-pt.html.markdown b/pt-br/matlab-pt.html.markdown new file mode 100644 index 00000000..eb660d4c --- /dev/null +++ b/pt-br/matlab-pt.html.markdown @@ -0,0 +1,540 @@ +--- +language: Matlab +contributors: +    - ["mendozao", "http://github.com/mendozao"] +    - ["jamesscottbrown", "http://jamesscottbrown.com"] +    - ["Colton Kohnke", "http://github.com/voltnor"] +translators: +    - ["Claudson Martins", "https://github.com/claudsonm"] +lang: pt-br +filename: learnmatlab-pt.mat + +--- + +MATLAB significa MATrix LABoratory. É uma poderosa linguagem de computação numérica geralmente utilizada em engenharia e matemática. + +Se você tem algum feedback, por favor fique a vontade para me contactar via +[@the_ozzinator](https://twitter.com/the_ozzinator), ou +[osvaldo.t.mendoza@gmail.com](mailto:osvaldo.t.mendoza@gmail.com). + +```matlab +% Comentários iniciam com um sinal de porcentagem + +%{ +Comentários de múltiplas linhas +parecem +com +algo assim +%} + +% Comandos podem ocupar várinhas linhas, usando '...': + a = 1 + 2 + ... + + 4 + +% Comandos podem ser passados para o sistema operacional +!ping google.com + +who % Exibe todas as variáveis na memória +whos % Exibe todas as variáveis na memória, com seus tipos +clear % Apaga todas as suas variáveis da memória +clear('A') % Apaga uma variável em particular +openvar('A') % Abre a variável no editor de variável + +clc % Apaga o conteúdo escrito na sua janela de comando +diary % Alterna o conteúdo escrito na janela de comando para um arquivo de texto +ctrl-c % Aborta a computação atual + +edit('minhafuncao.m') % Abre a função/script no editor +type('minhafuncao.m') % Imprime o código-fonte da função/script na janela de comando + +profile on    % Ativa o perfil de código +profile off 	% Desativa o perfil de código +profile viewer 	% Visualiza os resultados na janela de Profiler + +help comando 	% Exibe a documentação do comando na janela de comando +doc comando 	% Exibe a documentação do comando na janela de ajuda +lookfor comando % Procura por comando na primeira linha comentada de todas as funções +lookfor comando -all % Procura por comando em todas as funções + + +% Formatação de saída +format short 	% 4 casas decimais em um número flutuante +format long 	% 15 casas decimais +format bank 	% 2 dígitos após o ponto decimal - para cálculos financeiros +fprintf('texto') % Imprime na tela "texto" +disp('texto') 	% Imprime na tela "texto" + +% Variáveis & Expressões +minhaVariavel = 4  % O painel Workspace mostra a variável recém-criada +minhaVariavel = 4; % Ponto e vírgula suprime a saída para a janela de comando +4 + 6  		% Resposta = 10 +8 * minhaVariavel 	% Resposta = 32 +2 ^ 3 		% Resposta = 8 +a = 2; b = 3; +c = exp(a)*sin(pi/2) % c = 7.3891 + +% A chamada de funções pode ser feita por uma das duas maneiras: +% Sintaxe de função padrão: +load('arquivo.mat', 'y') % Argumentos entre parênteses, separados por vírgula +% Sintaxe de comando: +load arquivo.mat y 	% Sem parênteses, e espaços ao invés de vírgulas +% Observe a falta de aspas na forma de comando: entradas são sempre passadas +% como texto literal - não pode passar valores de variáveis. +% Além disso, não pode receber saída: +[V,D] = eig(A);  % Isto não tem um equivalente na forma de comando +[~,D] = eig(A);  % Se você só deseja D e não V + + + +% Operadores Lógicos e Relacionais +1 > 5 % Resposta = 0 +10 >= 10 % Resposta = 1 +3 ~= 4 % Diferente de -> Resposta = 1 +3 == 3 % Igual a -> Resposta = 1 +3 > 1 && 4 > 1 % E -> Resposta = 1 +3 > 1 || 4 > 1 % OU -> Resposta = 1 +~1 % NOT -> Resposta = 0 + +% Operadores Lógicos e Relacionais podem ser aplicados a matrizes +A > 5 +% Para cada elemento, caso seja verdade, esse elemento será 1 na matriz retornada +A( A > 5 ) +% Retorna um vetor com os elementos de A para os quais a condição é verdadeira + +% Cadeias de caracteres (Strings) +a = 'MinhaString' +length(a) % Resposta = 11 +a(2) % Resposta = i +[a,a] % Resposta = MinhaStringMinhaString + + +% Vetores de células +a = {'um', 'dois', 'três'} +a(1) % Resposta = 'um' - retorna uma célula +char(a(1)) % Resposta = um - retorna uma string + +% Estruturas +A.b = {'um','dois'}; +A.c = [1 2]; +A.d.e = false; + +% Vetores +x = [4 32 53 7 1] +x(2) % Resposta = 32, índices no Matlab começam por 1, não 0 +x(2:3) % Resposta = 32 53 +x(2:end) % Resposta = 32 53 7 1 + +x = [4; 32; 53; 7; 1] % Vetor coluna + +x = [1:10] % x = 1 2 3 4 5 6 7 8 9 10 + +% Matrizes +A = [1 2 3; 4 5 6; 7 8 9] +% Linhas são separadas por um ponto e vírgula; +% Elementos são separados com espaço ou vírgula +% A = + +%     1     2     3 +%     4     5     6 +%     7     8     9 + +A(2,3) % Resposta = 6, A(linha, coluna) +A(6) % Resposta = 8 +% (implicitamente encadeia as colunas do vetor, e então as indexa) + + +A(2,3) = 42 % Atualiza a linha 2 coluna 3 com o valor 42 +% A = + +%     1     2     3 +%     4     5     42 +%     7     8     9 + +A(2:3,2:3) % Cria uma nova matriz a partir da antiga +%Resposta = + +%     5     42 +%     8     9 + +A(:,1) % Todas as linhas na coluna 1 +%Resposta = + +%     1 +%     4 +%     7 + +A(1,:) % Todas as colunas na linha 1 +%Resposta = + +%     1     2     3 + +[A ; A] % Concatenação de matrizes (verticalmente) +%Resposta = + +%     1     2     3 +%     4     5    42 +%     7     8     9 +%     1     2     3 +%     4     5    42 +%     7     8     9 + +% Isto é o mesmo de +vertcat(A,A); + + +[A , A] % Concatenação de matrizes (horizontalmente) + +%Resposta = + +%     1     2     3     1     2     3 +%     4     5    42     4     5    42 +%     7     8     9     7     8     9 + +% Isto é o mesmo de +horzcat(A,A); + + +A(:, [3 1 2]) % Reorganiza as colunas da matriz original +%Resposta = + +%     3     1     2 +%    42     4     5 +%     9     7     8 + +size(A) % Resposta = 3 3 + +A(1, :) =[] % Remove a primeira linha da matriz +A(:, 1) =[] % Remove a primeira coluna da matriz + +transpose(A) % Transposta a matriz, que é o mesmo de: +A one +ctranspose(A) % Transposta a matriz +% (a transposta, seguida pelo conjugado complexo de cada elemento) + + + + +% Aritmética Elemento por Elemento vs. Aritmética com Matriz +% Naturalmente, os operadores aritméticos agem em matrizes inteiras. Quando +% precedidos por um ponto, eles atuam em cada elemento. Por exemplo: +A * B % Multiplicação de matrizes +A .* B % Multiplica cada elemento em A por seu correspondente em B + +% Existem vários pares de funções nas quais uma atua sob cada elemento, e a +% outra (cujo nome termina com m) age na matriz por completo. +exp(A) % Exponencia cada elemento +expm(A) % Calcula o exponencial da matriz +sqrt(A) % Tira a raiz quadrada de cada elemento +sqrtm(A) %  Procura a matriz cujo quadrado é A + + +% Gráficos +x = 0:.10:2*pi; % Vetor que começa em 0 e termina em 2*pi com incrementos de 0,1 +y = sin(x); +plot(x,y) +xlabel('eixo x') +ylabel('eixo y') +title('Gráfico de y = sin(x)') +axis([0 2*pi -1 1]) % x vai de 0 a 2*pi, y vai de -1 a 1 + +plot(x,y1,'-',x,y2,'--',x,y3,':') % Para várias funções em um só gráfico +legend('Descrição linha 1', 'Descrição linha 2') % Curvas com uma legenda + +% Método alternativo para traçar várias funções em um só gráfico: +% Enquanto 'hold' estiver ativo, os comandos serão adicionados ao gráfico +% existente ao invés de o substituirem. +plot(x, y) +hold on +plot(x, z) +hold off + +loglog(x, y) % Plotar em escala loglog +semilogx(x, y) % Um gráfico com eixo x logarítmico +semilogy(x, y) % Um gráfico com eixo y logarítmico + +fplot (@(x) x^2, [2,5]) % Plotar a função x^2 para x=2 até x=5 + +grid on % Exibe as linhas de grade; Oculta com 'grid off' +axis square % Torna quadrada a região dos eixos atuais +axis equal % Taxa de proporção onde as unidades serão as mesmas em todas direções + +scatter(x, y); % Gráfico de dispersão ou bolha +hist(x); % Histograma + +z = sin(x); +plot3(x,y,z); % Plotar em espaço em 3D + +pcolor(A) % Mapa de calor da matriz: traça uma grade de retângulos, coloridos pelo valor +contour(A) % Plotar de contorno da matriz +mesh(A) % Plotar malha 3D + +h = figure	% Cria uma nova figura objeto, com identificador h +figure(h) % Cria uma nova janela de figura com h +close(h) % Fecha a figura h +close all % Fecha todas as janelas de figuras abertas +close % Fecha a janela de figura atual + +shg % Traz uma janela gráfica existente para frente, ou cria uma nova se necessário +clf clear % Limpa a janela de figura atual e redefine a maioria das propriedades da figura + +% Propriedades podem ser definidas e alteradas através de um identificador. +% Você pode salvar um identificador para uma figura ao criá-la. +% A função gcf retorna o identificador da figura atual +h = plot(x, y); % Você pode salvar um identificador para a figura ao criá-la +set(h, 'Color', 'r') +% 'y' amarelo; 'm' magenta, 'c' ciano, 'r' vermelho, 'g' verde, 'b' azul, 'w' branco, 'k' preto +set(h, 'LineStyle', '--') + % '--' linha sólida, '---' tracejada, ':' pontilhada, '-.' traço-ponto, 'none' sem linha +get(h, 'LineStyle') + + +% A função gca retorna o identificador para os eixos da figura atual +set(gca, 'XDir', 'reverse'); % Inverte a direção do eixo x + +% Para criar uma figura que contém vários gráficos use subplot, o qual divide +% a janela de gráficos em m linhas e n colunas. +subplot(2,3,1); % Seleciona a primeira posição em uma grade de 2-por-3 +plot(x1); title('Primeiro Plot') % Plota algo nesta posição +subplot(2,3,2); % Seleciona a segunda posição na grade +plot(x2); title('Segundo Plot') % Plota algo ali + + +% Para usar funções ou scripts, eles devem estar no caminho ou na pasta atual +path % Exibe o caminho atual +addpath /caminho/para/pasta % Adiciona o diretório ao caminho +rmpath /caminho/para/pasta % Remove o diretório do caminho +cd /caminho/para/mudar % Muda o diretório + + +% Variáveis podem ser salvas em arquivos *.mat +save('meuArquivo.mat') % Salva as variáveis do seu Workspace +load('meuArquivo.mat') % Carrega as variáveis em seu Workspace + +% Arquivos M (M-files) +% Um arquivo de script é um arquivo externo contendo uma sequência de instruções. +% Eles evitam que você digite os mesmos códigos repetidamente na janela de comandos. +% Possuem a extensão *.m + +% Arquivos M de Funções (M-file Functions) +% Assim como scripts e têm a mesma extensão *.m +% Mas podem aceitar argumentos de entrada e retornar uma saída. +% Além disso, possuem seu próprio workspace (ex. diferente escopo de variáveis). +% O nome da função deve coincidir com o nome do arquivo (salve o exemplo como dobra_entrada.m) +% 'help dobra_entrada.m' retorna os comentários abaixo da linha de início da função +function output = dobra_entrada(x) +	%dobra_entrada(x) retorna duas vezes o valor de x +	output = 2*x; +end +dobra_entrada(6) % Resposta = 12 + + +% Você também pode ter subfunções e funções aninhadas. +% Subfunções estão no mesmo arquivo da função primária, e só podem ser chamados +% por funções dentro do arquivo. Funções aninhadas são definidas dentro de +% outras funções, e têm acesso a ambos workspaces. + +% Se você quer criar uma função sem criar um novo arquivo, você pode usar uma +% função anônima. Úteis para definir rapidamente uma função para passar a outra +% função (ex. plotar com fplot, avaliar uma integral indefinida com quad, +% procurar raízes com fzero, ou procurar mínimo com fminsearch). +% Exemplo que retorna o quadrado de sua entrada, atribuído ao identificador sqr: +sqr = @(x) x.^2; +sqr(10) % Resposta = 100 +doc function_handle % Saiba mais + +% Entrada do usuário +a = input('Digite o valor: ') + +% Para a execução do arquivo e passa o controle para o teclado: o usuário pode +% examinar ou alterar variáveis. Digite 'return' para continuar a execução, ou 'dbquit' para sair +keyboard + +% Leitura de dados (ou xlsread/importdata/imread para arquivos excel/CSV/imagem) +fopen(nomedoarquivo) + +% Saída +disp(a) % Imprime o valor da variável a +disp('Olá Mundo') % Imprime a string +fprintf % Imprime na janela de comandos com mais controle + +% Estruturas Condicionais (os parênteses são opicionais, porém uma boa prática) +if (a > 15) +	disp('Maior que 15') +elseif (a == 23) +	disp('a é 23') +else +	disp('Nenhuma condição reconheceu') +end + +% Estruturas de Repetição +% Nota: fazer o loop sobre elementos de um vetor/matriz é lento! +% Sempre que possível, use funções que atuem em todo o vetor/matriz de uma só vez. +for k = 1:5 +	disp(k) +end + +k = 0; +while (k < 5) +	k = k + 1; +end + +% Tempo de Execução de Código (Timing Code Execution): 'toc' imprime o tempo +% passado desde que 'tic' foi chamado. +tic +A = rand(1000); +A*A*A*A*A*A*A; +toc + +% Conectando a uma base de dados MySQL +dbname = 'nome_base_de_dados'; +username = 'root'; +password = 'root'; +driver = 'com.mysql.jdbc.Driver'; +dburl = ['jdbc:mysql://localhost:8889/' dbname]; +%Abaixo, o xx depende da versão, download disponível em http://dev.mysql.com/downloads/connector/j/ +javaclasspath('mysql-connector-java-5.1.xx-bin.jar'); +conn = database(dbname, username, password, driver, dburl); +sql = ['SELECT * FROM nome_tabela WHERE id = 22'] % Exemplo de uma consulta SQL +a = fetch(conn, sql) %a will contain your data + + +% Funções Matemáticas Comuns +sin(x) +cos(x) +tan(x) +asin(x) +acos(x) +atan(x) +exp(x) +sqrt(x) +log(x) +log10(x) +abs(x) +min(x) +max(x) +ceil(x) +floor(x) +round(x) +rem(x) +rand % Números pseudo-aleatórios uniformemente distribuídos +randi % Inteiros pseudo-aleatórios uniformemente distribuídos +randn % Números pseudo-aleatórios normalmente distribuídos + +% Constantes Comuns +pi +NaN +inf + +% Resolvendo equações matriciais (se não houver solução, retorna uma solução de mínimos quadrados) +% Os operadores \ e / são equivalentes às funções mldivide e mrdivide +x=A\b % Resolve Ax=b. Mais rápido e numericamente mais preciso do que inv(A)*b. +x=b/A % Resolve xA=b + +inv(A) % Calcula a matriz inversa +pinv(A) % Calcula a pseudo-inversa + +% Funções Matriciais Comuns +zeros(m,n) % Matriz de zeros m x n +ones(m,n) % Matriz de 1's m x n +diag(A) % Extrai os elementos diagonais da matriz A +diag(x) % Constrói uma matriz com os elementos diagonais listados em x, e zero nas outras posições +eye(m,n) % Matriz identidade +linspace(x1, x2, n) % Retorna n pontos igualmente espaçados, com min x1 e max x2 +inv(A) % Inverso da matriz A +det(A) % Determinante da matriz A +eig(A) % Valores e vetores próprios de A +trace(A) % Traço da matriz - equivalente a sum(diag(A)) +isempty(A) % Testa se a matriz está vazia +all(A) % Testa se todos os elementos são diferentes de zero ou verdadeiro +any(A) % Testa se algum elemento é diferente de zero ou verdadeiro +isequal(A, B) % Testa a igualdade de duas matrizes +numel(A) % Número de elementos na matriz +triu(x) % Retorna a parte triangular superior de x +tril(x) % Retorna a parte triangular inferior de x +cross(A,B) %  Retorna o produto cruzado das matrizes A e B +dot(A,B) % Retorna o produto escalar de duas matrizes (devem possuir mesmo tamanho) +transpose(A) % Retorna a matriz transposta de A +fliplr(A) % Inverte a matriz da esquerda para a direita +flipud(A) % Inverte a matriz de cima para baixo + +% Fatorações de Matrizes +% Decomposição LU: PA = LU,L é triangular inferior, U é triangular superior, P é a matriz de permutação +[L, U, P] = lu(A) +% Decomposição em Autovalores: AP = PD, colunas de P são autovetores e as diagonais de D são autovalores +[P, D] = eig(A) +% SVD: XV = US, U e V são matrizes unitárias, S possui elementos não negativos na diagonal em ordem decrescente +[U,S,V] = svd(X) + +% Funções Vetoriais Comuns +max     % Maior componente +min     % Menor componente +length  % Tamanho do vetor +sort    % Ordena em orcer ascendente +sum     % Soma de elementos +prod    % Produto de elementos +mode	% Valor modal +median  % Valor mediano +mean    % Valor médio +std     % Desvio padrão +perms(x) % Lista todas as permutações de elementos de x + + +% Classes +% Matlab pode suportar programação orientada a objetos. +% Classes devem ser colocadas em um arquivo de mesmo nome com a extensão *.m +% Para começar, criamos uma simples classe que armazena posições de GPS +% Início ClassePosicoesGPS.m +classdef ClassePosicoesGPS % O nome da classe. +  properties % As propriedades da classe comportam-se como estruturas +    latitude  +    longitude  +  end +  methods  +    % Este método que tem o mesmo nome da classe é o construtor. +    function obj = ClassePosicoesGPS(lat, lon) +      obj.latitude = lat; +      obj.longitude = lon; +    end + +    % Outras funções que usam os objetos de PosicoesGPS +    function r = multiplicarLatPor(obj, n) +      r = n*[obj.latitude]; +    end + +    % Se quisermos somar dois objetos de PosicoesGPS juntos sem chamar +    % uma função especial nós podemos sobrepor a aritmética do Matlab, desta maneira: +    function r = plus(o1,o2) +      r = ClassePosicoesGPS([o1.latitude] +[o2.latitude], ... +                        [o1.longitude]+[o2.longitude]); +    end +  end +end +% End ClassePosicoesGPS.m + +% Podemos criar um objeto da classe usando o construtor +a = ClassePosicoesGPS(45.0, 45.0) + +% Propriedades da classe se comportam exatamente como estruturas Matlab +a.latitude = 70.0 +a.longitude = 25.0 + +% Métodos podem ser chamados da mesma forma que funções +ans = multiplicarLatPor(a,3) + +% O método também pode ser chamado usando a notação de ponto. Neste caso, +% o objeto não precisa ser passado para o método. +ans = a.multiplicarLatPor(a,1/3) + +% Funções do Matlab podem ser sobrepostas para lidar com objetos. +% No método abaixo, nós sobrepomos a forma como o Matlab lida com a soma de +% dois objetos PosicoesGPS. +b = ClassePosicoesGPS(15.0, 32.0) +c = a + b + +``` + +## Mais sobre Matlab + +* O site oficial [http://http://www.mathworks.com/products/matlab/](http://www.mathworks.com/products/matlab/) +* O fórum oficial de respostas: [http://www.mathworks.com/matlabcentral/answers/](http://www.mathworks.com/matlabcentral/answers/) + diff --git a/pt-br/ruby-pt.html.markdown b/pt-br/ruby-pt.html.markdown index 89a051d4..668cd25f 100644 --- a/pt-br/ruby-pt.html.markdown +++ b/pt-br/ruby-pt.html.markdown @@ -4,6 +4,7 @@ lang: pt-br  filename: learnruby-pt.rb  contributors:    - ["Bruno Henrique - Garu", "http://garulab.com"] +  - ["Jean Matheus Souto", "http://jeanmatheussouto.github.io"]  translators:    - ["Katyanna Moura", "https://twitter.com/amelie_kn"]  --- @@ -161,9 +162,6 @@ hash['numero'] #=> 5  hash['nada aqui'] #=> nil  # Interar sobre hashes com o método #each: -hash.each do |k, v| -  puts "#{k} is #{v}" -end  hash.each do |k, v|    puts "#{k} é #{v}" @@ -385,3 +383,11 @@ Humano.bar # 0  Doutor.bar # nil  ``` + +## Mais sobre Ruby + +- [Documentação oficial](http://www.ruby-doc.org/core-2.1.1/) +- [Aprenda Ruby com desafios](http://www.learneroo.com/modules/61/nodes/338) - Uma coleção de desafios para testar a linguagem. +- [Ruby a partir de outras linguagens](https://www.ruby-lang.org/en/documentation/ruby-from-other-languages/) +- [Programming Ruby](http://www.amazon.com/Programming-Ruby-1-9-2-0-Programmers/dp/1937785491/)- Um mais antigo [free edition](http://ruby-doc.com/docs/ProgrammingRuby/) e tambem uma versão online disponível. +- [Ruby Style Guide](https://github.com/bbatsov/ruby-style-guide) - Uma versão colaborativa de um *style-guide* diff --git a/pt-br/sass-pt.html.markdown b/pt-br/sass-pt.html.markdown index 105896b2..3d91f1ca 100644 --- a/pt-br/sass-pt.html.markdown +++ b/pt-br/sass-pt.html.markdown @@ -6,6 +6,7 @@ contributors:    - ["Sean Corrales", "https://github.com/droidenator"]  translators:    - ["Gabriel Gomes", "https://github.com/gabrielgomesferraz"] +  - ["Cássio Böck", "https://github.com/cassiobsilva"]  lang: pt-br  --- @@ -155,16 +156,6 @@ body {    background-color: rgba(0, 0, 0, 0.75);  } -/* You may also define your own functions. Functions are very similar to -   mixins. When trying to choose between a function or a mixin, remember -   that mixins are best for generating CSS while functions are better for -   logic that might be used throughout your Sass code. The examples in -   the Math Operators' section are ideal candidates for becoming a reusable -   function. */ - -/* This function will take a target size and the parent size and calculate -   and return the percentage */ -  /* Você também pode definir suas próprias funções. As funções são muito semelhantes aos     mixins. Ao tentar escolher entre uma função ou um mixin, lembre-     que mixins são os melhores para gerar CSS enquanto as funções são melhores para @@ -319,11 +310,6 @@ ol {    padding: 0;  } -/* Sass offers @import which can be used to import partials into a file. -   This differs from the traditional CSS @import statement which makes -   another HTTP request to fetch the imported file. Sass takes the -   imported file and combines it with the compiled code. */ -  /* Sass oferece @import que pode ser usado para importar parciais em um arquivo.     Isso difere da declaração CSS @import tradicional, que faz     outra solicitação HTTP para buscar o arquivo importado. Sass converte os @@ -354,12 +340,6 @@ body {  ==============================*/   - -/* Placeholders are useful when creating a CSS statement to extend. If you -   wanted to create a CSS statement that was exclusively used with @extend, -   you can do so using a placeholder. Placeholders begin with a '%' instead -   of '.' or '#'. Placeholders will not appear in the compiled CSS. */ -  /* Os espaços reservados são úteis na criação de uma declaração CSS para ampliar. Se você     queria criar uma instrução CSS que foi usado exclusivamente com @extend,     Você pode fazer isso usando um espaço reservado. Espaços reservados começar com um '%' em vez @@ -396,11 +376,6 @@ body {  ============================== * / -/* Sass provides the following operators: +, -, *, /, and %. These can -   be useful for calculating values directly in your Sass files instead -   of using values that you've already calculated by hand. Below is an example -   of a setting up a simple two column design. */ -  /* Sass fornece os seguintes operadores: +, -, *, /, e %. estes podem     ser úteis para calcular os valores diretamente no seu Sass arquivos em vez     de usar valores que você já calculados pela mão. Abaixo está um exemplo | 
