Olha, sem parênteses!
As funções e funções de modelo de D podem ser chamadas como valores, métodos (não ajudarão) e propriedades.
Não acredito que ninguém tenha dito isso ainda. Vou listar os que salvam bytes:
fun()
e fun!()()
encurte para fun
(supondo que não haja variável fun
).
fun(par)
encurta para par.fun
(assumindo par
que não tem propriedade / método fun
, além de par
não ser uma expressão como 5+2
).
fun!(T)()
encurta para fun!T
fun!(T)(par)
reduz para par.fun!T
(supondo par
que não tenha propriedade / método fun
)
E com objetos:
new cls()
reduz para new cls
(Mais JavaScript alguém?)
obj.fun()
e obj.fun!()()
encurtar paraobj.fun
obj.fun!(T)()
encurta para obj.fun!T
Uma coisa final, use versões antigas . Ele permite que você use recursos obsoletos que diminuem o seu código. Dito isto, o melhor conselho: D não é bom para golfe de código. É uma ótima linguagem, apenas não para o código-golfe.
D é JavaScript.
Obviamente não. Mas, ao lidar com
float
,double
ereal
,nan
é um valor que deve ser tratado e, conforme especificado pela IEEE 754, o NaN não se compara igual a si mesmo.Significado,
é muito menor que
Obviamente, sempre use
math.isNaN
para código real . ;)fonte
D tem inferência de tipo e uma
auto
palavra - chave. Se o objeto não estiverint
,auto
provavelmente é mais curto.fonte
auto
ao criar uma matriz associativa com aKeyType[ValueType]
sintaxe?auto asd = ["a":1, "b": 2];
obras, mas desde queKeyType[ValueType]
iria no lugar daauto
palavra-chave, eu não sei se isso vai sempre trabalhar com tipos para o qual literais não podem ser construídasauto arr = ["a": true, "b": 6];
funciona, as chaves e os valores devem ser de tipos compatíveis #D é ótimo no encadeamento de métodos, mas:
é o mesmo que
e geralmente o não-encadeado é mais curto, o que acabei de perceber, o que me permite encurtar minha resposta para Gerenciar lixo Então : D
fonte
Como C / C ++,
main
pode serint
ouvoid
, masvoid main(){}
sempre será menor queint main(){return my_func_returning_int;}
.fonte
int main(){return output}
seria menor?import std.stdio;void main(){write(7);}
é necessário. Duvido uma pergunta seria mandatar o programa retornar um número, porque muitas línguas não é possível definir códigos de retornoD, como uma linguagem de programação de sistemas multiparadigmático (Object Functional), parece adotar o TIMTOWTDI ou existe mais de uma maneira de fazê-lo.
Caso em questão, escrevendo o argumento do programa:
Observe que o loop for do estilo C requer
{}
como bloco vazio e não aceitará ponto-e-vírgula ou nada como uma declaração em branco, neste caso . Geralmente,ou
;
não são ops.fonte
char*
no lugar destring
para salvar um byte?function D main parameters must be main() or main(string[] args)
além disso,char
é literalmente um caractere,char*
é um ponteiro para literalmente um caractere echar[]
é uma matriz de literais de caracteres (as strings são diferentes). D! = C || C ++D tem alguns tipos de expressões lambda no estilo C #, que podem ser atribuídas e independentes:
No entanto, diferentemente do C #, os tipos de assinatura ainda são necessários porque D não possui inferências de tipo no nível Haskell.
https://dlang.org/spec/expression.html#Lambda
fonte
T f(T)(T a,T b){return a + b}
deve inferir T como int emf(5);
Chamando uma função em um objeto sem outros argumentos
quase sempre pode ser reduzido para
raspar um byte ou mais.
Isso ocorre porque
.
torna o LHS um primeiro argumento implícito e a modelagem permite escolher a função correta para os argumentos.fonte
x.reverse(y, z)
é mais por causa do dotx.reverse(y,z)
ereverse(x,y,z)
tem a mesma contagem de bytes.x.reverse(y, z)
comx.reverse
?Se a pergunta exigir um programa completo, a
module
declaração é surpreendentemente desnecessária.* tosse * Java, alguém? * limpa a garganta * Na verdade , o
module
sistema de D é mais antigo que o de Java.fonte