Spójrz, żadnych parens!
Funkcje D i funkcje szablonów można wywoływać jako wartości, metody (nie pomogą) i właściwości.
Nie mogę uwierzyć, że nikt jeszcze tego nie powiedział. Wymienię te, które oszczędzają bajty:
fun()
i fun!()()
skróć do fun
(zakładając, że nie ma zmiennej fun
).
fun(par)
skraca się do par.fun
(zakładając, że par
nie ma właściwości / metody fun
, a także par
nie jest wyrażeniem podobnym do 5+2
).
fun!(T)()
skraca się do fun!T
fun!(T)(par)
skraca się do par.fun!T
(zakładając, że par
nie ma właściwości / metody fun
)
I z przedmiotami:
new cls()
skraca się do new cls
(Więcej osób w JavaScript?)
obj.fun()
i obj.fun!()()
skrócić doobj.fun
obj.fun!(T)()
skraca się do obj.fun!T
I ostatnia rzecz, użyj starych wersji . Pozwala korzystać z przestarzałych funkcji, które skracają kod. To powiedziawszy, najlepsza rada: D nie nadaje się do golfa kodowego. To świetny język, nie tylko do gry w golfa.
D to JavaScript.
Oczywiście, że nie. Ale kiedy masz do czynienia
float
,double
ireal
,nan
jest wartością, z którą trzeba sobie i, jak określono w IEEE 754, NaN nie porównuje się z samym sobą.Znaczenie,
jest o wiele krótszy niż
Oczywiście, zawsze używać
math.isNaN
dla prawdziwego kodu. ;)źródło
D ma wnioskowanie typu i
auto
słowo kluczowe. Jeśli obiekt nie jestint
,auto
to prawdopodobnie jest krótszy.źródło
auto
działa podczas budowania tablicy asocjacyjnej zeKeyType[ValueType]
składnią?auto asd = ["a":1, "b": 2];
działa, ale ponieważKeyType[ValueType]
miałby miejsce zamiastauto
słowa kluczowego, nie wiem, czy to zawsze będzie działać z typami, dla których literałów nie można zbudowaćauto arr = ["a": true, "b": 6];
działa, klucze i wartości muszą być kompatybilnych typówD doskonale nadaje się do łączenia metod, ale:
jest taki sam jak
i zwykle ten niepowiązany z łańcuchem jest krótszy, co właśnie zdałem sobie sprawę, co pozwala mi skrócić moją odpowiedź na Manage Trash So : D
źródło
Podobnie jak C / C ++,
main
może byćint
lubvoid
, alevoid main(){}
zawsze będzie krótszy niżint main(){return my_func_returning_int;}
.źródło
int main(){return output}
podać jako liczbę całkowitą, nie byłoby krótsze?import std.stdio;void main(){write(7);}
jest to, czego potrzeba. Wątpię, czy pytanie wymagałoby od programu zwrotu numeru, ponieważ wiele języków nie może ustawić kodów powrotuD, jako język programowania systemów wieloparadigmowych (Object Functional), wydaje się obejmować TIMTOWTDI, czyli istnieje więcej niż jeden sposób, aby to zrobić.
Przykładem jest napisanie argv programu:
Zwróć uwagę, że pętla for-style w stylu C wymaga
{}
pustego bloku i w tym przypadku nie zaakceptuje średnika ani niczego jako pustej instrukcji . Zwyklelub
;
nie ma operacji.źródło
char*
zamiaststring
zapisać bajt?function D main parameters must be main() or main(string[] args)
ponadtochar
jest dosłownie jednym znakiem,char*
jest wskaźnikiem dosłownie jednego znaku ichar[]
jest tablicą literałów znakowych (łańcuchy są różne). D! = C || C ++D ma kilka typów wyrażeń lambda w stylu C #, które można przypisać i autonomicznie:
Jednak w przeciwieństwie do C #, typy podpisu są nadal potrzebne, ponieważ D nie ma wnioskowania na poziomie Haskell.
https://dlang.org/spec/expression.html#Lambda
źródło
T f(T)(T a,T b){return a + b}
Należy wnioskować T jako int wf(5);
Wywołanie funkcji na obiekcie bez innych argumentów
prawie zawsze można je skrócić
ogolić bajt lub więcej.
Wynika to z faktu,
.
że LHS jest domyślnym pierwszym argumentem, a szablony pozwalają nam wybrać odpowiednią funkcję dla argumentów.źródło
x.reverse(y, z)
jest on dłuższy z powodu kropkix.reverse(y,z)
ireverse(x,y,z)
mają tę samą liczbę bajtów.x.reverse(y, z)
sięx.reverse
?Jeśli pytanie wymaga pełnego programu,
module
deklaracja jest zaskakująco niepotrzebna.* kaszel * Java, ktoś? * odchrząkuje * W rzeczywistości
module
system D jest starszy niż Java.źródło