Answers:
看,没有人!
D的函数和模板函数可以称为值,方法(无济于事)和属性。
我不敢相信还没有人这么说。我将列出那些保存字节的文件:
fun()
并fun!()()
缩短为fun
(假设没有变量fun
)。fun(par)
缩短为par.fun
(假设par
没有属性/方法fun
,并且par
不是类似的表达式5+2
)。fun!(T)()
缩短为 fun!T
fun!(T)(par)
缩短为par.fun!T
(假设par
没有属性/方法fun
)和对象:
new cls()
缩短为new cls
(更多JavaScript吗?)obj.fun()
并obj.fun!()()
缩短为obj.fun
obj.fun!(T)()
缩短为 obj.fun!T
最后一件事,请使用旧版本。它允许您使用不赞成使用的功能,从而缩短了代码。就是说,最好的建议是:D不适用于代码高尔夫。这是一种很棒的语言,只是不适合于代码高尔夫球。
D擅长方法链接,但是:
str.toLower.strip().split("").sort();
是相同的
sort(split(strip(str.toLower),""));
通常,非链式链的较短,这是我刚刚意识到的,这使我可以缩短对“ 管理垃圾箱”的回答:D
像C / C ++一样,main
可以是int
或void
,但void main(){}
总是比短int main(){return my_func_returning_int;}
。
int main(){return output}
更短?
import std.stdio;void main(){write(7);}
这是需要的。我怀疑一个问题,将要求该程序返回一个数字,因为许多语言不能设置返回代码
作为一种多范式(对象功能)系统编程语言,D似乎包含TIMTOWTDI,或者说有不止一种方法可以做到这一点。
举例来说,编写程序的argv:
import std.stdio, std.array, std.algorithm;
void main(string[] args) {
for(int i=0;i<args.length;writeln(args[i++])){};
foreach(a;args)writeln(a);
each!writeln(args);
}
请注意{}
,在这种情况下,C样式的for循环require 作为空块,并且不接受分号或不接受任何内容作为空白语句。通常,还是
;
没有人。
char*
代替string
保存一个字节吗?
function D main parameters must be main() or main(string[] args)
此外,它char
是字面上的一个字符,char*
是指向字面上的一个字符的指针,并且char[]
是字符字面量的数组(字符串不同)。D!= C || C ++
D有几种类型的C#样式的lambda表达式,可以将其分配并单独使用:
(int a,int b)=>a*b;
auto a=(int a,int b)=>a*b;
但是,与C#不同,仍然需要签名的类型,因为D没有Haskell级别的类型推断。
T f(T)(T a,T b){return a + b}
应该推断牛逼如INT中f(5);
在没有其他参数的情况下在对象上调用函数
reverse(x);
几乎总是可以缩短为
x.reverse;
剃一个字节或更多。
这是因为.
使得LHS成为隐式的第一个参数,而模板化使我们为args选择了正确的函数。
x.reverse(y, z)
是长点的,因为
x.reverse(y,z)
并reverse(x,y,z)
具有相同的字节数
x.reverse(y, z)
来x.reverse
?