Conceitos básicos: D
From AdonaiMedrado.Pro.Br
Contents
Tipos básicos [1]
void no type - bool = false byte (8 bits com sinal) = 0 ubyte (8 bits sem sinal) = 0 short (16 bits com sinal) = 0 ushort (16 bits sem sinal) = 0 int (32 bits com sinal) = 0 uint (32 bits sem sinal) 0 long (64 bits com sinal) = 0L ulong (64 bits sem sinal) = 0L cent (128 bits com sinal - reservado) = 0 ucent (128 bits sem sinal - reservado) = 0 float (ponto flutuante de 32 bits) = float.nan double (ponto flutuante de 64 bits) = double.nan real (maior ponto flutuante implementado pelo hardware) real.nan ifloat (float imaginário) = float.nan * 1.0i idouble (double imaginário) = double.nan * 1.0i ireal (real imaginário) = real.nan * 1.0i cfloat (número complexo com dois valores float) = float.nan + float.nan * 1.0i cdouble (número complexo com dois valores double) = double.nan + double.nan * 1.0i creal (número complexo com dois valores real) = real.nan + real.nan * 1.0i char (8 bits sem sinal - UTF-8) = 0xFF wchar (16 bits sem sinal - UTF-16) = 0xFFFF dchar (32 bits sem sinal - UTF-32) = 0x0000FFFF
Vetores e matrizes [1]
Ponteiro
int *p;
Vetor estático
int[3] s; int s[3];
Tamanho máximo: 16Mb.
Vetor dinâmico
int[] a; int a[];
Vetor associado
int[char[]] x;
Ponteiro para vetor dinâmico
int[]* e; int (*e)[];
Ponteiros para vetores
int*[]*[3] d; int*[]* d[3]; int* (*d[3])[];
Matrizes estáticas
int[4][3] b; int[4] b[3]; int b[3][4];
Matrizes dinâmicas
int[][5] c; int[] c[5]; int c[5][];
Slicing
int[10] a; int[] b; b = a[1..3]; // a[1..3] representa um array de 2 elementos (a[1] and a[2]).
Atribuição
int[3] s; int[3] t; s[0..2] = t[1..3]; // mesmo que s[0] = t[1], s[1] = t[2]. s[] = 3; // mesmo que s[0] = 3, s[1] = 3, s[2] = 3. p[0..2] = 3; // mesmo que p[0] = 3, p[1] = 3.
Concatenação
int[] a; int[] b; int[] c; a = b ~ c; // cria um array resultado da concatenção d b com c. a ~= b; // concatena b ao array a.
Estruturas condicionais
if
Especificação
IfStatement: if ( IfCondition ) ThenStatement if ( IfCondition ) ThenStatement else ElseStatement IfCondition: Expression auto Identifier = Expression Declarator = Expression ThenStatement: ScopeStatement ElseStatement: ScopeStatement
Exemplo
if (...) { ... } else { ... }
switch
? :
Estrutura de repetição
for
Especificacão
ForStatement: for (Initialize Test; Increment) ScopeStatement Initialize: ; NoScopeNonEmptyStatement Test: empty Expression Increment: empty Expression
Exemplo
for (int i = 0; i < 10; i++) foo(i);
Atenção:
for (int i = 0; i < 10; i++) ; //isto não é permitido. for (int i = 0; i < 10; i++) {} //mas isto sim.
foreach
Especificação
ForeachStatement: Foreach (ForeachTypeList; Aggregate) ScopeStatement Foreach: foreach foreach_reverse ForeachTypeList: ForeachType ForeachType , ForeachTypeList ForeachType: inout Type Identifier Type Identifier inout Identifier Identifier Aggregate: Expression Tuple
Exemplo 1
Exemplo também é válido para foreach_reverse.
char[] a; ... foreach (int i, char c; a) { printf("a[%d] = '%c'\n", i, c); }
Exemplo 2
Exemplo também é válido para foreach_reverse.
foreach (char c; "ab") { printf("'%c'\n", c); }
Exemplo 3
Exemplo abaixo não é válido para foreach_reverse.
double[char[]] a; ... foreach (char[] s, double d; a) { printf("a['%.*s'] = %g\n", s, d); }
Exemplo 4
O segundo parâmetro de foreach ou foreach_reverse pode ser uma classe desde que ela implemente o operador opApply e/ou opApplyReverse respectivamente.
class Foo { uint array[2]; int opApply(int delegate(inout uint) dg) { int result = 0; for (int i = 0; i < array.length; i++) { result = dg(array[i]); if (result) break; } return result; } } void test() { Foo a = new Foo(); a.array[0] = 73; a.array[1] = 82; foreach (uint u; a) { printf("%d\n", u); } }
while
Especificação
WhileStatement: while ( Expression ) ScopeStatement
Exemplo
int i = 0; while (i < 10) { foo(i); i++; }
do...while
Especificação
DoStatement: do ScopeStatement while ( Expression )
Exemplo
int i = 0; do { foo(i); } while (++i < 10);
Declaração
Bloco
BlockStatement: { } { StatementList } StatementList: Statement Statement StatementList
Função
Classe
Referências
- ↑ 1.0 1.1 D Specification em http://www.prowiki.org/upload/duser/spec_DMD_1.00.pdf