Mira, no parens!
Las funciones de D y funciones de plantilla se pueden llamar como valores, métodos (no ayudarán) y propiedades.
No puedo creer que nadie haya dicho esto todavía. Voy a enumerar los que guardan bytes:
fun()
y fun!()()
acortar a fun
(suponiendo que no hay variable fun
).
fun(par)
se acorta a par.fun
(suponiendo que par
no tiene propiedad / método fun
, además de par
no ser una expresión como 5+2
).
fun!(T)()
acorta a fun!T
fun!(T)(par)
se acorta a par.fun!T
(suponiendo que par
no tiene propiedad / método fun
)
Y con objetos:
new cls()
acorta a new cls
(¿Más JavaScript a alguien?)
obj.fun()
y obj.fun!()()
acortar aobj.fun
obj.fun!(T)()
acorta a obj.fun!T
Una última cosa, usa versiones antiguas . Le permite usar funciones obsoletas que acortan su código. Dicho esto, el mejor consejo: D no es bueno para el golf de código. Es un gran idioma, pero no para el golf de código.
D es JavaScript.
Obviamente no. Pero, cuando se trata de
float
,double
yreal
,nan
es un valor que debe manejarse, y, según lo especificado por IEEE 754, NaN no se compara igual a sí mismo.Sentido,
es mucho más corto que
Obviamente, use siempre
math.isNaN
para código real . ;)fuente
D tiene inferencia de tipos y una
auto
palabra clave. Si el objeto no esint
, entoncesauto
probablemente sea más corto.fuente
auto
Funciona al construir una matriz asociativa con laKeyType[ValueType]
sintaxis?auto asd = ["a":1, "b": 2];
funciona, pero comoKeyType[ValueType]
iría en lugar de laauto
palabra clave, no sé si eso siempre funcionará con tipos para los que no se pueden construir literalesauto arr = ["a": true, "b": 6];
funciona, las claves y los valores deben ser de tipos compatiblesD es excelente en el método de encadenamiento, pero:
es lo mismo que
y, por lo general, el no encadenado es más corto, lo que acabo de dar cuenta, lo que me permite acortar mi respuesta a Administrar Papelera Entonces : D
fuente
Al igual que C / C ++,
main
puede serint
ovoid
, perovoid main(){}
siempre será más corto queint main(){return my_func_returning_int;}
.fuente
int main(){return output}
sería más corta?import std.stdio;void main(){write(7);}
es lo que se necesita. Dudo que una pregunta obligue al programa a devolver un número porque muchos idiomas no pueden establecer códigos de retornoD, como lenguaje de programación de sistemas multiparadigm (Object Functional), parece adoptar TIMTOWTDI, o hay más de una forma de hacerlo.
Caso en cuestión, escribiendo el argumento del programa:
Tenga en cuenta que el estilo for-loop de C requiere
{}
como bloque vacío y no aceptará un punto y coma o nada como una declaración en blanco, en este caso . Por lo general,o
;
son no-ops.fuente
char*
en lugar destring
guardar un byte?function D main parameters must be main() or main(string[] args)
además,char
es literalmente un carácter,char*
es un puntero a literalmente un carácter ychar[]
es una matriz de literales de caracteres (las cadenas son diferentes). D! = C || C ++D tiene algunos tipos de expresiones lambda de estilo C #, que pueden asignarse y ser independientes:
Sin embargo, a diferencia de C #, los tipos de firma todavía son necesarios porque D no tiene inferencia de tipo de nivel Haskell.
https://dlang.org/spec/expression.html#Lambda
fuente
T f(T)(T a,T b){return a + b}
debe inferir T como int inf(5);
Llamar a una función en un objeto sin otros argumentos
casi siempre se puede acortar a
afeitarse un byte o más.
Esto se debe a que
.
hace que el LHS sea un primer argumento implícito, y la creación de plantillas nos permite elegir la función correcta para los argumentos.fuente
x.reverse(y, z)
es más largo debido al puntox.reverse(y,z)
yreverse(x,y,z)
tienen el mismo número de bytes.x.reverse(y, z)
ax.reverse
?Si la pregunta requiere un programa completo, la
module
declaración es sorprendentemente innecesaria.* tos * Java, alguien? * se aclara la garganta * En realidad , el
module
sistema de D es más antiguo que el de Java.fuente