Schau, keine Eltern!
Die Funktionen und Vorlagenfunktionen von D können als Werte, Methoden (hilft nicht) und Eigenschaften aufgerufen werden.
Ich kann nicht glauben, dass dies noch niemand gesagt hat. Ich werde diejenigen auflisten, die Bytes speichern:
fun()
und fun!()()
verkürzen auf fun
(vorausgesetzt, es gibt keine Variable fun
).
fun(par)
verkürzt sich auf par.fun
(vorausgesetzt, es par
hat keine Eigenschaft / Methode fun
und ist kein par
Ausdruck wie 5+2
).
fun!(T)()
verkürzt sich zu fun!T
fun!(T)(par)
verkürzt sich auf par.fun!T
(vorausgesetzt, es par
gibt keine Eigenschaft / Methode fun
)
Und mit Gegenständen:
new cls()
verkürzt sich auf new cls
(Mehr JavaScript jemand?)
obj.fun()
und obj.fun!()()
verkürzen aufobj.fun
obj.fun!(T)()
verkürzt sich zu obj.fun!T
Eine letzte Sache, verwenden Sie alte Versionen . Sie können veraltete Funktionen verwenden, die Ihren Code verkürzen. Der beste Rat: D ist nicht gut für Code-Golf. Es ist eine großartige Sprache, nur nicht für Code-Golf.
D ist JavaScript.
Offensichtlich nicht. Aber im Umgang mit
float
,double
undreal
,nan
ist ein Wert, der behandelt werden muss und wie angegeben von IEEE 754, NaN nicht mit sich selbst gleich vergleichen.Bedeutung,
ist viel kürzer als
Natürlich immer
math.isNaN
für echten Code verwenden. ;)quelle
D hat Typinferenz und ein
auto
Schlüsselwort. Wenn das Objekt nicht istint
,auto
ist es wahrscheinlich kürzer.quelle
auto
beim Erstellen eines assoziativen Arrays mit derKeyType[ValueType]
Syntax?auto asd = ["a":1, "b": 2];
funktioniert, aber daKeyType[ValueType]
anstelle desauto
Schlüsselworts verwendet werden würde, weiß ich nicht, ob dies immer mit Typen funktioniert, für die Literale nicht erstellt werden könnenauto arr = ["a": true, "b": 6];
funktioniert, müssen die Schlüssel und Werte von kompatiblen Typen seinD eignet sich hervorragend zum Verketten von Methoden, aber:
ist das gleiche wie
und normalerweise ist die nicht verkettete kürzer, was ich gerade festgestellt habe, wodurch ich meine Antwort auf Manage Trash So : D verkürzen kann
quelle
Wie C / C ++
main
kannint
oder seinvoid
, wird abervoid main(){}
immer kürzer sein alsint main(){return my_func_returning_int;}
.quelle
int main(){return output}
kürzer wäre?import std.stdio;void main(){write(7);}
ist dies erforderlich. Ich bezweifle, dass eine Frage das Programm dazu zwingen würde, eine Nummer zurückzugeben, da viele Sprachen keine Rückkehrcodes festlegen könnenD scheint als Programmiersprache für Multiparadigmensysteme (Object Functional) TIMTOWTDI zu umfassen, oder es gibt mehr als einen Weg, dies zu tun.
Beispiel: Schreiben Sie das Argument des Programms:
Beachten Sie, dass die for-Schleife im C-Stil
{}
als leerer Block erforderlich ist und in diesem Fall kein Semikolon oder nichts als leere Anweisung akzeptiert . Normalerweiseoder
;
sind No-Ops.quelle
char*
anstelle vonstring
ein Byte speichern?function D main parameters must be main() or main(string[] args)
Darüber hinauschar
ist es buchstäblich ein Zeichen,char*
ist ein Zeiger auf buchstäblich ein Zeichen undchar[]
ist ein Array von Zeichenliteralen (Zeichenfolgen sind unterschiedlich). D! = C || C ++D hat einige Arten von Lambda-Ausdrücken im C # -Stil, die zugewiesen werden können und eigenständig sind:
Im Gegensatz zu C # werden die Signaturtypen jedoch weiterhin benötigt, da D keine Typinferenz auf Haskell-Ebene hat.
https://dlang.org/spec/expression.html#Lambda
quelle
T f(T)(T a,T b){return a + b}
sollte T als int inf(5);
Aufruf einer Funktion für ein Objekt ohne andere Argumente
kann fast immer auf verkürzt werden
ein Byte oder mehr rasieren.
Dies liegt daran,
.
dass das LHS ein implizites erstes Argument ist und wir durch Vorlagen die richtige Funktion für die Argumente auswählen können.quelle
x.reverse(y, z)
ist länger , weil die Punktx.reverse(y,z)
undreverse(x,y,z)
haben die gleiche Byteanzahl.x.reverse(y, z)
zux.reverse
?Wenn die Frage ein vollständiges Programm erfordert, ist die
module
Erklärung überraschend unnötig.* hust * Java, jemand? * räuspert sich * Eigentlich ist Ds
module
System älter als das von Java.quelle