Aus dem großen Archiv von „Dinge, über die Chris viel zu lange völlig verwirrt war und die er jetzt halb versteht, also kann er auch darüber bloggen“: Code Golf. Ich hörte jemanden sagen: „Ich habe es von meinem eigenen Golfspiel so klein bekommen.“ Ich kniff die Augen zusammen, verwirrt und ließ es einfach so stehen, weil es nicht wichtig genug schien, um danach zu fragen. Vielleicht Slang für „Arbeit“ oder „Tüfteln“.
Das ist eigentlich gar nicht so weit hergeholt. Die ganze Idee ist, Code auf so wenige Zeichen wie möglich zu reduzieren und ihn dabei funktionsfähig zu halten. Beim (echten) Golf gilt: Je weniger Schläge man braucht, um den Ball ins Loch zu bringen, desto besser ist man. Beim Code Golf gilt: Je weniger Zeichen man verwendet, desto besser ist man.
Manchmal ist Code Golf Teil eines Wettbewerbs (oder *Turniers*, um im Jargon zu bleiben). Manchmal ist es nur zum Spaß. Manchmal ist es nützlich. Manchmal besteht das Format darin, eine bestimmte Herausforderung oder einen Algorithmus zu lösen oder mit gegebenen Eingaben eine bestimmte erwartete Ausgabe zu erzielen.
Die Verständlichkeit von „gegolftem“ Code geht dabei völlig verloren. Der Code soll nicht verstanden werden, er soll kurz sein und funktionieren. Es ist üblich, sich ein Stück gegolftem Code mit völliger Verwirrung anzusehen. Hier ist eins:
function(a){a='0x'+a.slice(1).replace(a.length>4?a:/./g,'$&$&')|0;return[a>>16,a>>8&255,a&255]}
Das ist ein Stück JavaScript, das eine Hex-Farbe nimmt und die RGB-Werte daraus zurückgibt. Schwer zu erkennen, wenn man es nur anschaut! Es stammt von Jed Schmidt auf seiner Seite 140byt.es, die Tweet-große Stücke von JavaScript präsentiert, die funktionale Dinge tun.
Im Fall von JavaScript kann gegolfter Code gelegentlich nützlich sein, da er weniger Code bedeutet, der über das Netzwerk gesendet werden muss.
Wikipedia hat einen Artikel über Code Golf und sagt, dass es 1999 mit Perl begann. So ziemlich jede Sprache, die man sich vorstellen kann, kann man „golfen“ (es ist schließlich nur ein Konzept) und wahrscheinlich gibt es dafür sogar Turniere. Sowohl Reddit als auch StackExchange haben dafür eigene Unterseiten.
Abgesehen davon, dass es einfach Spaß macht, kann es eine Übung darin sein, ein tieferes Verständnis der Sprache zu entwickeln und die eigene Logik und Problemlösungsfähigkeit zu dehnen.
Code Golf muss nicht formalisiert sein, es kann einfach etwas sein, das man zum Spaß macht. Wenn man ein paar Codezeilen von etwas abspart, an dem man gerade arbeitet, hat man es „gegolft“.
Als relevante Nebenbemerkung: Eine Sprache, in der ich bisher wenig Golf gesehen habe, ist SVG. SVG eignet sich aber irgendwie perfekt dafür, da es so mathematisch, deklarativ und referenziell ist. Dieser Pen hat mich darauf gebracht:
Siehe den Pen Arrows von fuddl (@fuddl) auf CodePen.
Ich habe mich auch daran versucht
Siehe den Pen SVG Golf von Chris Coyier (@chriscoyier) auf CodePen.
http://codegolf.stackexchange.com/
Danke für diesen Artikel!
JS-Code-Golfing ist mein Haupt-Hobby (mit einer Gruppe von Jungs auf Twitter & Github).
Die meisten unserer Arbeiten finden Sie hier
https://gist.github.com/xem/206db44adbdd09bac424
Und hier sind einige weitere interessante Links, die erwähnenswert sind
– http://www.reddit.com/r/tinycode/
– http://js1k.com
Prost!
Das ist das coolste, nerdigste Hobby. Ich bin davon super inspiriert.
Das nehme ich als Kompliment :) Danke
Zum Thema SVG-Golf: Das ist mein liebstes schreckliches Beispiel für komprimierten SVG-Code, dank der Ausnutzung des HTML5-Parsers zum Einfügen aller möglichen fehlenden Zeichen
http://codegolf.stackexchange.com/a/26752
Ich liebe Code Golf! Eines der nützlichsten Dinge, die ich gemacht habe, war die Umwandlung eines DOM-Selektor-Arrays in ein normales Array, über das man iterieren kann. Ich habe es in 140 Bytes geschafft.
http://codepen.io/fabean/pen/vEMPrW
Habe noch nie von Code-Golfing gehört, aber die Erklärung macht vollkommen Sinn. Danke fürs Teilen.
Und falls Sie
vi/vimverwenden und es noch nicht ausprobiert haben, können Sie sich Vim Golf ansehenSie können live mit anderen Codern auf CodeWars.com konkurrieren. Es hat auch ein Punktesystem und so, was ziemlich nett ist.
Vimgolf ist ein ziemlich beliebtes Ruby-Gem und einen Blick wert. http://www.vimgolf.com/
Wie wäre es mit *nichts tun* in C#?
Ich habe eine winzige aj(ax)-Bibliothek erstellt, nachdem ich gelesen habe
github.com/aretecode/aj
Das ist lustig. Ich habe immer den Ausdruck „Hole in One“ verwendet, wenn man durch Code hindurchbricht und er beim ersten Aktualisieren genau wie erhofft funktioniert.
Eine Sache, die ich in diesem Artikel wirklich vermisse, ist ein kleiner Abschnitt, der erklärt, dass Golfen in Produktionscode fast immer eine wirklich schlechte Idee ist.
Bei realen Projekten geht es um mehr als nur darum, Code zu schreiben, der die Arbeit erledigt. In einem realen Projekt ist es auch sehr wichtig, dass der Code leicht zu lesen und zu verstehen ist. Code, der leicht zu verstehen ist, enthält tendenziell weniger Fehler und ist viel einfacher zu warten.
Zu viel Golfing führt fast immer zu unnötig obskurem Code, der schwer zu durchschauen ist. Dies erhöht das Fehlerrisiko und macht die Wartung erheblich schwieriger.
Ich stimme Ruben vollkommen zu! Wie oft mussten Sie sich mit „Pfadfinder“-Code auseinandersetzen, der zwar in einer Zeile geschrieben ist, aber im Grunde unleserlich ist?
Ja, Code-Golf ist ein Antipattern.
Guter Code ist klar, nicht esoterisch.
Fizzbuzz, jemand?
Gilt das als Golf? http://www.nanochess.org/chess3.html