Câu trả lời:
Hãy nhìn xem, không có parens!
Hàm D và hàm mẫu có thể được gọi là giá trị, phương thức (sẽ không trợ giúp) và thuộc tính.
Tôi không thể tin rằng chưa có ai nói điều này. Tôi sẽ liệt kê những cái lưu byte:
fun()
và fun!()()
rút ngắn lại fun
(giả sử không có biến fun
).fun(par)
rút ngắn lại par.fun
(giả sử par
không có thuộc tính / phương thức fun
, cũng như par
không phải là một biểu thức như 5+2
).fun!(T)()
rút ngắn để fun!T
fun!(T)(par)
rút ngắn lại par.fun!T
(giả sử par
không có thuộc tính / phương thức fun
)Và với các đối tượng:
new cls()
rút ngắn thành new cls
(Nhiều JavaScript hơn ai?)obj.fun()
và obj.fun!()()
rút ngắn xuốngobj.fun
obj.fun!(T)()
rút ngắn để obj.fun!T
Một điều cuối cùng, sử dụng các phiên bản cũ . Nó cho phép bạn sử dụng các tính năng không dùng nữa để rút ngắn mã của bạn. Điều đó nói rằng, lời khuyên tốt nhất: D không tốt cho môn đánh gôn. Đó là một ngôn ngữ tuyệt vời, không chỉ dành cho môn đánh gôn.
D là JavaScript.
Rõ ràng là không. Tuy nhiên, khi đối phó với float
, double
và real
, nan
là một giá trị mà phải được xử lý, và, theo quy định của IEEE 754, NaN không so sánh bằng với chính nó.
writeln(double.nan == double.nan); // false
Ý nghĩa,
writeln(value!=value); // only true for nan
là cách ngắn hơn
import std.math;
writeln(isNaN(value));
Rõ ràng, luôn luôn sử dụng math.isNaN
cho mã thực sự . ;)
D có loại suy luận và một auto
từ khóa. Nếu đối tượng không int
, thì auto
có lẽ ngắn hơn.
auto
hoạt động khi xây dựng một mảng kết hợp với KeyType[ValueType]
cú pháp?
auto asd = ["a":1, "b": 2];
hoạt động, nhưng vì KeyType[ValueType]
sẽ đi vào vị trí của auto
từ khóa, tôi không biết liệu nó có luôn hoạt động với các loại mà chữ không thể được xây dựng hay không
auto arr = ["a": true, "b": 6];
hoạt động, các khóa và giá trị phải là loại tương thích
D là tuyệt vời ở phương pháp xích, nhưng:
str.toLower.strip().split("").sort();
giống như
sort(split(strip(str.toLower),""));
và thường thì cái không bị xiềng xích ngắn hơn, điều mà tôi vừa nhận ra, điều này cho phép tôi rút ngắn câu trả lời của mình cho Manage Trash So : D
Giống như C / C ++, main
có thể int
hoặc void
, nhưng void main(){}
sẽ luôn ngắn hơn int main(){return my_func_returning_int;}
.
int main(){return output}
ngắn hơn?
import std.stdio;void main(){write(7);}
là những gì cần thiết. Tôi nghi ngờ một câu hỏi sẽ bắt buộc chương trình trả về một số vì nhiều ngôn ngữ không thể đặt mã trả về
D, với tư cách là một ngôn ngữ lập trình hệ thống đa chức năng (Object Functional), dường như nắm lấy TIMTOWTDI hoặc có nhiều cách để làm điều đó.
Trường hợp tại điểm, viết argv của chương trình:
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);
}
Lưu ý vòng lặp for kiểu C yêu cầu {}
là khối trống và sẽ không chấp nhận dấu chấm phẩy hoặc không có gì dưới dạng câu lệnh trống, trong trường hợp này . Thông thường, hoặc
;
là không-ops.
char*
thay thế string
để lưu một byte không?
function D main parameters must be main() or main(string[] args)
hơn nữa, theo char
nghĩa đen là một ký tự, char*
là một con trỏ đến nghĩa đen của một ký tự và char[]
là một mảng các ký tự chữ (các chuỗi khác nhau). D! = C | | C ++
D có một vài loại biểu thức lambda kiểu C #, có thể được chỉ định và độc lập:
(int a,int b)=>a*b;
auto a=(int a,int b)=>a*b;
Tuy nhiên, không giống như C #, các loại chữ ký vẫn cần thiết vì D không có loại suy luận cấp độ Haskell.
T f(T)(T a,T b){return a + b}
nên suy ra T là int inf(5);
Gọi một hàm trên một đối tượng không có đối số khác
reverse(x);
gần như luôn luôn có thể được rút ngắn để
x.reverse;
để cạo một byte trở lên.
Điều này là do .
LHS làm cho một đối số đầu tiên ngầm định và việc tạo khuôn mẫu cho phép chúng ta chọn chức năng phù hợp cho các đối số.
x.reverse(y, z)
thì dài hơn vì dấu chấm
x.reverse(y,z)
và reverse(x,y,z)
có cùng số byte.
x.reverse(y, z)
với x.reverse
?