mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2025-08-17 20:11:57 +02:00
Fixing typos
Fixing pt-br typos
This commit is contained in:
@@ -7,29 +7,30 @@ contributors:
|
|||||||
translators:
|
translators:
|
||||||
- ["João Farias", "https://github.com/JoaoGFarias"]
|
- ["João Farias", "https://github.com/JoaoGFarias"]
|
||||||
- ["Elton Viana", "https://github.com/eltonvs"]
|
- ["Elton Viana", "https://github.com/eltonvs"]
|
||||||
|
- ["Cássio Böck", "https://github.com/cassiobsilva"]
|
||||||
lang: pt-br
|
lang: pt-br
|
||||||
filename: c-pt.el
|
filename: c-pt.el
|
||||||
---
|
---
|
||||||
|
|
||||||
Ah, C. Ainda é **a** linguagem de computação de alta performance.
|
Ah, C. Ainda é **a** linguagem de computação de alta performance.
|
||||||
|
|
||||||
C é a liguangem de mais baixo nível que a maioria dos programadores
|
C é a linguagem de mais baixo nível que a maioria dos programadores
|
||||||
irão usar, e isso dá a ela uma grande velocidade bruta. Apenas fique
|
utilizarão, 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
|
atento se este manual de gerenciamento de memória e C vai te levar
|
||||||
tão longe quanto você precisa.
|
tão longe quanto precisa.
|
||||||
|
|
||||||
```c
|
```c
|
||||||
// Comentários de uma linha iniciam-se com // - apenas disponível a partir do C99
|
// 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.
|
Funcionam no C89 também.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Constantes: #define <palavra-chave>
|
// Constantes: #define <palavra-chave>
|
||||||
#definie DAY_IN_YEAR 365
|
#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};
|
enum day {DOM = 1, SEG, TER, QUA, QUI, SEX, SAB};
|
||||||
// SEG recebe 2 automaticamente, TER recebe 3, etc.
|
// 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
|
// O ponto de entrada do teu programa é uma função
|
||||||
// chamada main, com tipo de retorno inteiro
|
// chamada main, com tipo de retorno inteiro
|
||||||
int main() {
|
int main() {
|
||||||
// Usa-se printf para escrever na tela,
|
// Usa-se printf para escrever na tela,
|
||||||
// para "saída formatada"
|
// para "saída formatada"
|
||||||
// %d é um inteiro, \n é uma nova linha
|
// %d é um inteiro, \n é uma nova linha
|
||||||
printf("%d\n", 0); // => Imprime 0
|
printf("%d\n", 0); // => Imprime 0
|
||||||
// Todos as declarações devem acabar com
|
// Todos as declarações devem acabar com
|
||||||
// ponto e vírgula
|
// ponto e vírgula
|
||||||
|
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
// Tipos
|
// Tipos
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
@@ -78,7 +79,7 @@ int main() {
|
|||||||
// longs tem entre 4 e 8 bytes; longs long tem garantia
|
// longs tem entre 4 e 8 bytes; longs long tem garantia
|
||||||
// de ter pelo menos 64 bits
|
// de ter pelo menos 64 bits
|
||||||
long x_long = 0;
|
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
|
// floats são normalmente números de ponto flutuante
|
||||||
// com 32 bits
|
// com 32 bits
|
||||||
@@ -93,7 +94,7 @@ int main() {
|
|||||||
unsigned int ux_int;
|
unsigned int ux_int;
|
||||||
unsigned long long ux_long_long;
|
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.
|
// no conjunto de caracteres da máquina.
|
||||||
'0' // => 48 na tabela ASCII.
|
'0' // => 48 na tabela ASCII.
|
||||||
'A' // => 65 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
|
// Se o argumento do operador `sizeof` é uma expressão, então seus argumentos
|
||||||
// não são avaliados (exceto em VLAs (veja abaixo)).
|
// 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;
|
int a = 1;
|
||||||
// size_t é um inteiro sem sinal com pelo menos 2 bytes que representa
|
// size_t é um inteiro sem sinal com pelo menos 2 bytes que representa
|
||||||
// o tamanho de um objeto.
|
// o tamanho de um objeto.
|
||||||
@@ -120,7 +121,7 @@ int main() {
|
|||||||
// Você pode inicializar um array com 0 desta forma:
|
// Você pode inicializar um array com 0 desta forma:
|
||||||
char meu_array[20] = {0};
|
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
|
// Melhor dizendo, outras linguagens são semelhantes a C
|
||||||
meu_array[0]; // => 0
|
meu_array[0]; // => 0
|
||||||
|
|
||||||
@@ -129,7 +130,7 @@ int main() {
|
|||||||
printf("%d\n", meu_array[1]); // => 2
|
printf("%d\n", meu_array[1]); // => 2
|
||||||
|
|
||||||
// No C99 (e como uma features opcional em C11), arrays de tamanho variável
|
// 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:
|
// não precisam ser uma constante de tempo de compilação:
|
||||||
printf("Entre o tamanho do array: "); // Pergunta ao usuário pelo tamanho
|
printf("Entre o tamanho do array: "); // Pergunta ao usuário pelo tamanho
|
||||||
char buf[0x100];
|
char buf[0x100];
|
||||||
@@ -144,14 +145,14 @@ int main() {
|
|||||||
// > Entre o tamanho do array: 10
|
// > Entre o tamanho do array: 10
|
||||||
// > sizeof array = 40
|
// > 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'.
|
// byte nulo (0x00), representado em string pelo caracter especial '\0'.
|
||||||
// (Não precisamos incluir o byte nulo em literais de string; o compilador
|
// (Não precisamos incluir o byte nulo em literais de string; o compilador
|
||||||
// o insere ao final do array para nós.)
|
// 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
|
// Observe que 'é' não está na tabela ASCII
|
||||||
// A string vai ser salva, mas a saída vai ser estranha
|
// 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("%s\n", uma_string); // %s formata a string
|
||||||
|
|
||||||
printf("%d\n", uma_string[17]); // => 0
|
printf("%d\n", uma_string[17]); // => 0
|
||||||
@@ -175,7 +176,7 @@ int main() {
|
|||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
|
|
||||||
// Atalho para multiplas declarações:
|
// Atalho para multiplas declarações:
|
||||||
int i1 = 1, i2 = 2;
|
int i1 = 1, i2 = 2;
|
||||||
float f1 = 1.0, f2 = 2.0;
|
float f1 = 1.0, f2 = 2.0;
|
||||||
|
|
||||||
int a, b, c;
|
int a, b, c;
|
||||||
@@ -206,7 +207,7 @@ int main() {
|
|||||||
2 <= 2; // => 1
|
2 <= 2; // => 1
|
||||||
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;
|
int a = 1;
|
||||||
// Errado:
|
// Errado:
|
||||||
int entre_0_e_2 = 0 < a < 2;
|
int entre_0_e_2 = 0 < a < 2;
|
||||||
@@ -231,7 +232,7 @@ int main() {
|
|||||||
char *s = "iLoveC";
|
char *s = "iLoveC";
|
||||||
int j = 0;
|
int j = 0;
|
||||||
s[j++]; // => "i". Retorna o j-ésimo item de s E DEPOIS incrementa o valor de j.
|
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.
|
s[++j]; // => "L". Incrementa o valor de j. E DEPOIS retorna o j-ésimo item de s.
|
||||||
// o mesmo com j-- e --j
|
// o mesmo com j-- e --j
|
||||||
|
|
||||||
@@ -308,7 +309,7 @@ int main() {
|
|||||||
exit(-1);
|
exit(-1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
// Cast de tipos
|
// Cast de tipos
|
||||||
@@ -327,8 +328,8 @@ int main() {
|
|||||||
// Tipos irão ter overflow sem aviso
|
// Tipos irão ter overflow sem aviso
|
||||||
printf("%d\n", (unsigned char) 257); // => 1 (Max char = 255 se char tem 8 bits)
|
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
|
// 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
|
// um `unisigned char`, respectivamente, use as macros CHAR_MAX, SCHAR_MAX
|
||||||
// e UCHAR_MAX de <limits.h>
|
// e UCHAR_MAX de <limits.h>
|
||||||
|
|
||||||
// Tipos inteiros podem sofrer cast para pontos-flutuantes e vice-versa.
|
// 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.
|
// 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.
|
// Pode usar o endereço de memória de suas variáveis, então, brincar com eles.
|
||||||
|
|
||||||
int x = 0;
|
int x = 0;
|
||||||
@@ -363,13 +364,13 @@ int main() {
|
|||||||
printf("%d\n", *px); // => Imprime 0, o valor de x
|
printf("%d\n", *px); // => Imprime 0, o valor de x
|
||||||
|
|
||||||
// Você também pode mudar o valor que o ponteiro está apontando.
|
// 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 *.
|
// ++ tem uma precedência maior que *.
|
||||||
(*px)++; // Incrementa o valor que px está apontando por 1
|
(*px)++; // Incrementa o valor que px está apontando por 1
|
||||||
printf("%d\n", *px); // => Imprime 1
|
printf("%d\n", *px); // => Imprime 1
|
||||||
printf("%d\n", x); // => 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 x_array[20]; // Declara um array de tamanho 20 (não pode-se mudar o tamanho
|
||||||
int xx;
|
int xx;
|
||||||
for (xx = 0; xx < 20; 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
|
// Declara um ponteiro do tipo int e inicialize ele para apontar para x_array
|
||||||
int* x_ptr = x_array;
|
int* x_ptr = x_array;
|
||||||
// x_ptr agora aponta para o primeiro elemento do array (o inteiro 20).
|
// 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
|
// Por exemplo, quando um array é passado para uma função ou é atribuído a um
|
||||||
// ponteiro, ele transforma-se (convertido implicitamente) em um ponteiro.
|
// ponteiro, ele transforma-se (convertido implicitamente) em um ponteiro.
|
||||||
// Exceções: quando o array é o argumento de um operador `&` (endereço-de):
|
// 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"
|
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
|
// 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_ptr + 1)); // => Imprime 19
|
||||||
printf("%d\n", x_array[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"
|
// "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.
|
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
|
// 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);
|
free(my_ptr);
|
||||||
|
|
||||||
// Strings são arrays de char, mas elas geralmente são representadas
|
// 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;
|
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:
|
// para evitar cópia de toda a struct:
|
||||||
int area(const retan *r)
|
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.
|
diretamente e passá-las para por toda parte.
|
||||||
Entretanto, a sintaxe de definição por ser um pouco confusa.
|
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) {
|
void str_reverso_através_ponteiro(char *str_entrada) {
|
||||||
// Define uma variável de ponteiro para função, nomeada f.
|
// Define uma variável de ponteiro para função, nomeada f.
|
||||||
void (*f)(char *); //Assinatura deve ser exatamente igual à função alvo.
|
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:
|
// Declarando o ponteiro:
|
||||||
// ...
|
// ...
|
||||||
// minha_função_type f;
|
// minha_função_type f;
|
||||||
|
|
||||||
//Caracteres especiais:
|
//Caracteres especiais:
|
||||||
'\a' // Alerta (sino)
|
'\a' // Alerta (sino)
|
||||||
@@ -586,7 +587,7 @@ typedef void (*minha_função_type)(char *);
|
|||||||
'\r' // Retorno de carroça
|
'\r' // Retorno de carroça
|
||||||
'\b' // Backspace
|
'\b' // Backspace
|
||||||
'\0' // Caracter nulo. Geralmente colocado ao final de string em C.
|
'\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
|
'\\' // Barra invertida
|
||||||
'\?' // Interrogação
|
'\?' // Interrogação
|
||||||
'\'' // Aspas simples
|
'\'' // Aspas simples
|
||||||
@@ -606,7 +607,7 @@ typedef void (*minha_função_type)(char *);
|
|||||||
"%p" // ponteiro
|
"%p" // ponteiro
|
||||||
"%x" // hexadecimal
|
"%x" // hexadecimal
|
||||||
"%o" // octal
|
"%o" // octal
|
||||||
"%%" // imprime %
|
"%%" // imprime %
|
||||||
|
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
// Ordem de avaliação
|
// Ordem de avaliação
|
||||||
|
@@ -1,203 +0,0 @@
|
|||||||
---
|
|
||||||
language: pogoscript
|
|
||||||
contributors:
|
|
||||||
- ["Tim Macfarlane", "http://github.com/refractalize"]
|
|
||||||
translators:
|
|
||||||
- ["Cássio Böck", "https://github.com/cassiobsilva"]
|
|
||||||
filename: learnPogo-pt-br.pogo
|
|
||||||
lang: pt-br
|
|
||||||
---
|
|
||||||
|
|
||||||
Pogoscript é uma linguagem de programação que possui tipos primitivos concorrents
|
|
||||||
e que compila para linguagem Javascript padrão.
|
|
||||||
|
|
||||||
``` javascript
|
|
||||||
// definindo uma variável
|
|
||||||
water temperature = 24
|
|
||||||
|
|
||||||
// reatribuindo o valor de uma variável após a sua definição
|
|
||||||
water temperature := 26
|
|
||||||
|
|
||||||
// funções permitem que seus parâmetros sejam colocados em qualquer lugar
|
|
||||||
temperature at (a) altitude = 32 - a / 100
|
|
||||||
|
|
||||||
// funções longas são apenas indentadas
|
|
||||||
temperature at (a) altitude :=
|
|
||||||
if (a < 0)
|
|
||||||
water temperature
|
|
||||||
else
|
|
||||||
32 - a / 100
|
|
||||||
|
|
||||||
// declarando uma função
|
|
||||||
current temperature = temperature at 3200 altitude
|
|
||||||
|
|
||||||
// essa função cria um novo objeto com métodos
|
|
||||||
position (x, y) = {
|
|
||||||
x = x
|
|
||||||
y = y
|
|
||||||
|
|
||||||
distance from position (p) =
|
|
||||||
dx = self.x - p.x
|
|
||||||
dy = self.y - p.y
|
|
||||||
Math.sqrt (dx * dx + dy * dy)
|
|
||||||
}
|
|
||||||
|
|
||||||
// `self` é similiar ao `this` do Javascript, com exceção de que `self` não
|
|
||||||
// é redefinido em cada nova função
|
|
||||||
|
|
||||||
// declaração de métodos
|
|
||||||
position (7, 2).distance from position (position (5, 1))
|
|
||||||
|
|
||||||
// assim como no Javascript, objetos também são hashes
|
|
||||||
position.'x' == position.x == position.('x')
|
|
||||||
|
|
||||||
// arrays
|
|
||||||
positions = [
|
|
||||||
position (1, 1)
|
|
||||||
position (1, 2)
|
|
||||||
position (1, 3)
|
|
||||||
]
|
|
||||||
|
|
||||||
// indexando um array
|
|
||||||
positions.0.y
|
|
||||||
|
|
||||||
n = 2
|
|
||||||
positions.(n).y
|
|
||||||
|
|
||||||
// strings
|
|
||||||
poem = 'Tail turned to red sunset on a juniper crown a lone magpie cawks.
|
|
||||||
Mad at Oryoki in the shrine-room -- Thistles blossomed late afternoon.
|
|
||||||
Put on my shirt and took it off in the sun walking the path to lunch.
|
|
||||||
A dandelion seed floats above the marsh grass with the mosquitos.
|
|
||||||
At 4 A.M. the two middleaged men sleeping together holding hands.
|
|
||||||
In the half-light of dawn a few birds warble under the Pleiades.
|
|
||||||
Sky reddens behind fir trees, larks twitter, sparrows cheep cheep cheep
|
|
||||||
cheep cheep.'
|
|
||||||
|
|
||||||
// texto de Allen Ginsburg
|
|
||||||
|
|
||||||
// interpolação
|
|
||||||
outlook = 'amazing!'
|
|
||||||
console.log "the weather tomorrow is going to be #(outlook)"
|
|
||||||
|
|
||||||
// expressões regulares
|
|
||||||
r/(\d+)m/i
|
|
||||||
r/(\d+) degrees/mg
|
|
||||||
|
|
||||||
// operadores
|
|
||||||
true @and true
|
|
||||||
false @or true
|
|
||||||
@not false
|
|
||||||
2 < 4
|
|
||||||
2 >= 2
|
|
||||||
2 > 1
|
|
||||||
|
|
||||||
// os operadores padrão do Javascript também são suportados
|
|
||||||
|
|
||||||
// definindo seu próprio operador
|
|
||||||
(p1) plus (p2) =
|
|
||||||
position (p1.x + p2.x, p1.y + p2.y)
|
|
||||||
|
|
||||||
// `plus` pode ser usado com um operador
|
|
||||||
position (1, 1) @plus position (0, 2)
|
|
||||||
// ou como uma função
|
|
||||||
(position (1, 1)) plus (position (0, 2))
|
|
||||||
|
|
||||||
// retorno explícito
|
|
||||||
(x) times (y) = return (x * y)
|
|
||||||
|
|
||||||
// new
|
|
||||||
now = @new Date ()
|
|
||||||
|
|
||||||
// funções podem receber argumentos opcionais
|
|
||||||
spark (position, color: 'black', velocity: {x = 0, y = 0}) = {
|
|
||||||
color = color
|
|
||||||
position = position
|
|
||||||
velocity = velocity
|
|
||||||
}
|
|
||||||
|
|
||||||
red = spark (position 1 1, color: 'red')
|
|
||||||
fast black = spark (position 1 1, velocity: {x = 10, y = 0})
|
|
||||||
|
|
||||||
// funções também podem ser utilizadas para realizar o "unsplat" de argumentos
|
|
||||||
log (messages, ...) =
|
|
||||||
console.log (messages, ...)
|
|
||||||
|
|
||||||
// blocos são funções passadas para outras funções.
|
|
||||||
// Este bloco recebe dois parâmetros, `spark` e `c`,
|
|
||||||
// o corpo do bloco é o código indentado após a declaração da função
|
|
||||||
|
|
||||||
render each @(spark) into canvas context @(c)
|
|
||||||
ctx.begin path ()
|
|
||||||
ctx.stroke style = spark.color
|
|
||||||
ctx.arc (
|
|
||||||
spark.position.x + canvas.width / 2
|
|
||||||
spark.position.y
|
|
||||||
3
|
|
||||||
0
|
|
||||||
Math.PI * 2
|
|
||||||
)
|
|
||||||
ctx.stroke ()
|
|
||||||
|
|
||||||
// chamadas assíncronas
|
|
||||||
|
|
||||||
// O Javascript, tanto no navegador quanto no servidor (através do Node.js)
|
|
||||||
// realiza um uso massivo de funções assíncronas de E/S (entrada/saída) com
|
|
||||||
// chamadas de retorno (callbacks). A E/S assíncrona é ótima para a performance e
|
|
||||||
// torna a utilização da concorrência simples, porém pode rapidamente se tornar
|
|
||||||
// algo complicado.
|
|
||||||
// O Pogoscript possui algumas coisas que tornam o uso de E/S assíncrono muito
|
|
||||||
// mais fácil
|
|
||||||
|
|
||||||
// O Node.js inclui o móduolo `fs` para acessar o sistema de arquivos.
|
|
||||||
// Vamos listar o conteúdo de um diretório
|
|
||||||
|
|
||||||
fs = require 'fs'
|
|
||||||
directory listing = fs.readdir! '.'
|
|
||||||
|
|
||||||
// `fs.readdir()` é uma função assíncrona, então nos a chamamos usando o
|
|
||||||
// operador `!`. O operador `!` permite que você chame funções assíncronas
|
|
||||||
// com a mesma sintaxe e a mesma semântica do que as demais funções síncronas.
|
|
||||||
// O Pogoscript reescreve a função para que todo código inserido após o
|
|
||||||
// operador seja inserido em uma função de callback para o `fs.readdir()`.
|
|
||||||
|
|
||||||
// obtendo erros ao utilizar funções assíncronas
|
|
||||||
|
|
||||||
try
|
|
||||||
another directory listing = fs.readdir! 'a-missing-dir'
|
|
||||||
catch (ex)
|
|
||||||
console.log (ex)
|
|
||||||
|
|
||||||
// na verdade, se você não usar o `try catch`, o erro será passado para o
|
|
||||||
// `try catch` mais externo do evento, assim como é feito em exceções síncronas
|
|
||||||
|
|
||||||
// todo o controle de estrutura também funciona com chamadas assíncronas
|
|
||||||
// aqui um exemplo de `if else`
|
|
||||||
config =
|
|
||||||
if (fs.stat! 'config.json'.is file ())
|
|
||||||
JSON.parse (fs.read file! 'config.json' 'utf-8')
|
|
||||||
else
|
|
||||||
{
|
|
||||||
color: 'red'
|
|
||||||
}
|
|
||||||
|
|
||||||
// para executar duas chamadas assíncronas de forma concorrente, use o
|
|
||||||
// operador `?`.
|
|
||||||
// O operador `?` retorna um *future*, que pode ser executado para
|
|
||||||
// aguardar o resultado, novamente utilizando o operador `!`
|
|
||||||
|
|
||||||
// nós não esperamos nenhuma dessas chamadas serem concluídas
|
|
||||||
a = fs.stat? 'a.txt'
|
|
||||||
b = fs.stat? 'b.txt'
|
|
||||||
|
|
||||||
// agora nos aguardamos o término das chamadas e escrevemos os resultados
|
|
||||||
console.log "size of a.txt is #(a!.size)"
|
|
||||||
console.log "size of b.txt is #(b!.size)"
|
|
||||||
|
|
||||||
// no Pogoscript, futures são semelhantes a Promises
|
|
||||||
```
|
|
||||||
E encerramos por aqui.
|
|
||||||
|
|
||||||
Baixe o [Node.js](http://nodejs.org/) e execute `npm install pogo`.
|
|
||||||
|
|
||||||
Há bastante documentação em [http://pogoscript.org/](http://pogoscript.org/), incluindo um material para [consulta rápida](http://pogoscript.org/cheatsheet.html), um [guia](http://pogoscript.org/guide/), e como o [Pogoscript é traduzido para o Javascript](http://featurist.github.io/pogo-examples/). Entre em contato através do [grupo do Google](http://groups.google.com/group/pogoscript) se você possui dúvidas!
|
|
Reference in New Issue
Block a user