Answers:
看,没有人!
D的函数和模板函数可以称为值,方法(无济于事)和属性。
我不敢相信还没有人这么说。我将列出那些保存字节的文件:
fun()并fun!()()缩短为fun(假设没有变量fun)。fun(par)缩短为par.fun(假设par没有属性/方法fun,并且par不是类似的表达式5+2)。fun!(T)() 缩短为 fun!Tfun!(T)(par)缩短为par.fun!T(假设par没有属性/方法fun)和对象:
new cls()缩短为new cls(更多JavaScript吗?)obj.fun()并obj.fun!()()缩短为obj.funobj.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?