Egal wie sehr Sie eine Programmiersprache lieben, es gibt immer ein paar Details, die nicht so schön sind, wie sie sein könnten.
In dieser Frage möchte ich mich speziell auf Syntaxelemente konzentrieren. Welches Syntaxelement ist für Sie in einer Programmiersprache, die Sie häufig verwenden (vielleicht Ihre Lieblingsprogrammiersprache oder die, die Sie bei der Arbeit verwenden müssen), am unlesbarsten, unklarsten, unbequemsten oder unangenehmsten?
Antworten:
Einfügen von Semikolons in JavaScript.
Ich bin nicht wirklich oft davon gebissen worden, aber es ist eine phänomenal schlechte Idee, die mir den Kopf verdreht.
Hier sind die Regeln (aus ECMA-262, Abschnitt 7.9)
Beispiel:
quelle
Java-Bean-Syntax aufgrund fehlender C # -Eigenschaften
GAH !!!
Probleme habe ich damit
getX
,getY
,getZ
,getAnotherAnnoyingField
,getWhyIHateJavaBeans
,getThisIsVerbose
,getGAH
... ah da ist es,hashCode
.quelle
public
. Mitglieder sollten privat sein und von der Klasse mit übergeordneter Logik sinnvoll manipuliert werden, nicht mit Gettern und Setzern aus dem Client-Code.Whitespace-Empfindlichkeit.
Python nervt mich in dieser Hinsicht. Ich meine, ich rücke sowieso richtig ein, aber es nervt mich, dass ich muss . Präsentation als Teil der Syntax zu sehen, ärgert mich.
quelle
Die
switch
Anweisung (in C, C ++, C #, Java usw.)Hier ist ein Beispiel, warum ich es sehr unbequem finde:
Dies wird nicht kompiliert, da die Variable
i
im selben Bereich neu deklariert wird. Dies scheint ein kleines Detail zu sein, aber es beißt mich wirklich oft. Ich kann geschweifte Klammern hinzufügen, um dies zu mildern, aber es wäre schön gewesen, wenn die geschweiften Klammern obligatorischer Bestandteil der Syntax gewesen wären und es keine redundante zusätzliche Einrückungsebene gab. Ich hasse es auch wirklich, das Extra schreiben zu müssenbreak
. Das wäre viel schöner:Dies lässt es eher wie eine
if
/else
-Kette aussehen , was eine gute Sache ist, da es auch semantisch ähnlich ist. Zumindest in C # wäre es jedoch immer noch nicht dasselbe, da in einerswitch
Anweisung die Reihenfolge der case-Bezeichnungen keine Rolle spielt, aber in einemif
/else
es.quelle
goto
oder ähnlichem) dargestellt wird, wie dies bereits in C # der Fall ist.case Foo of 1,3: Result := 'odd'; 2,4: Result := 'even' end;
.break
es wäre die Standardeinstellung und es müsste nur noch ein Fallthrough angegeben werden. Sie müssen sich nicht mehr daran erinnern, es zu kommentieren! :)Array-Deklarationen in VB.NET
Es gelingt mir immer zu vergessen, dass Sie beim Initialisieren von festen Arrays in VB.NET die Obergrenze des Arrays und nicht die Anzahl der Elemente wie in C / C ++, PHP oder Java angeben. Abgesehen von VB6 (wir werden dort nicht hingehen ...) kann ich mir keine andere Sprache vorstellen, die das so macht:
quelle
VB6 - Separate Variablendeklaration und Zuordnung
In den meisten Sprachen können Sie eine Variable deklarieren und in einer Codezeile zuweisen. VB6 zwingt Sie dagegen, zwei zu verwenden.
Sie können einen Doppelpunkt verwenden, um zwei Befehle in eine Zeile einzufügen, der Code wird jedoch schnell unübersichtlich.
quelle
Dim Hurp As New Collection
etwas zugreifen, auf dasHurp
es sich beziehtNothing
, wird es vor dem Zugriff auf magische Weise initialisiert. Wenn Sie es explizit auf stellenNothing
und erneut berühren, wird es wiederbelebt ... keuchen!Kommentieren in CSS
//
Kommentiert keine Codezeilen wie in vielen anderen Sprachen wie PHP und Javascript. Obwohl/* this is commented out */
funktioniert, bevorzuge ich zu verwenden//
.Es ist ärgerlich, weil ich die Hälfte der Zeit vergesse, in der ich CSS bearbeite und dann zurückgehen muss, um den Fehler zu beheben.
quelle
PHP - konsistente Reihenfolge der Argumente
PHP verfügt über eine Reihe praktischer Funktionen, mit denen Sie praktisch jede Operation ausführen können, die Sie sich für ein Array oder einen String vorstellen können. Für viele dieser Operationen müssen sowohl a
$needle
als auch a verwendet$haystack
werden. Unterschiedliche Funktionen führen sie jedoch in unterschiedlicher Reihenfolge aus. Welche Funktion welche Argumente erfordert, ist eine dieser Tatsachen, die mein Gehirn nicht aufnimmt, egal wie oft ich auf sie stoße!Nehmen Sie die Funktionen in_array und strstr :
Komischerweise scheint PHP intern mit dieser Reihenfolge übereinzustimmen, da alle String-Funktionen zu verwenden scheinen,
$haystack, $needle
während Array-Funktionen umgekehrt sind, aber dies kann für jemanden, der neu in PHP ist, etwas gewöhnungsbedürftig sein. Es gibt einen guten Beitrag auf ExpressionEngine, der ausführlicher über diese besondere Eigenart spricht, sowie eine Diskussion über die PHP-Fehlerliste , die eine sehr kurze Antwort des PHP-Teams enthält!quelle
$needle
,$haystack
da dies an die Art und Weise erinnert , wie man sagt , eine Nadel im Heuhaufen zu finden .strstr
. So schön sinnlos.Python
self
Parameter in Instanz Methodendefinitionenquelle
self
passiert leicht und kostet Zeit.Java
Zeitraum. Punkt. Ende der Geschichte.
Wo soll man anfangen? Oh, ich weiß, wo ich anfangen soll: Java ist wahnsinnig kompliziert und hässlich und dumm und von Natur aus kaputte Generika. Muss ich mehr sagen? :( Okay, dann: Schreibe Erasure .
Dann gibt es nicht deterministisches Ressourcenmanagement. Kewl Fußschütze!
Was kommt als nächstes? Oh ja: Javas blöde Regexes sind mein irritierendstes, brodelndes Rindfleisch. Ich kann nicht zählen, wie oft ich abgespritzt wurde, weil ich nicht genug Backslashes hatte. Dies ist noch schlimmer, als keinen Zugriff auf Unicode-Eigenschaften aus diesem Jahrtausend zu haben - was ein absoluter Reinfall ist. Zehn verdammte Jahre veraltet !!! Völlig nutzlos. Mach es kaputt.
Dann gibt es den Fehler, dass die Zeichenklassenverknüpfungen nicht mit Nicht-ASCII funktionieren. Was für ein königlicher Schmerz! Und erwägen Sie nicht einmal die Verwendung
\p{javaWhiteSpace}
; Mit einigen sehr verbreiteten Unicode-Whitespace-Codepunkten ist das nicht richtig.Wussten Sie, dass es eine
\p{javaJavaIdentifierStart}
Immobilie gibt? Was haben sie gedacht? Ich bin so froh, dass sie so kluge Spanner haben.Haben Sie jemals versucht, das CANON_EQ-Flag zu verwenden? Wissen Sie, dass das wirklich funktioniert und was nicht ? Wie wäre es mit einem sogenannten "Unicode-Fall"? Eine Menge normaler Gehäuse-Dinge funktionieren überhaupt nicht.
Dann machen sie es schwierig, wartbare reguläre Ausdrücke zu schreiben. Java hat immer noch nicht herausgefunden, wie man mehrzeilige Strings schreibt, also schreibt man am Ende wahnsinnige Dinge wie diese:
Was sind all diese Zeilenumbrüche? Oh, nur Java-Dummheit. Sie verwendeten Perl-Kommentare, keine Java-Kommentare ( Idioten! ), Die bis zum Ende der Zeile reichen. Wenn Sie diese also nicht
\n
dort ablegen, hacken Sie den Rest Ihres Musters ab. Duh und doppelt duh!Verwenden Sie keine regulären Ausdrücke in Java: Sie werden am Ende einfach Dinge zerschlagen wollen, es ist alles so schmerzhaft und kaputt. Ich kann nicht glauben, dass sich die Leute damit abfinden. Manche nicht .
Dann können wir anfangen, über Javas idiotischen Unsinn mit Codierungen zu sprechen. Erstens gibt es die Tatsache, dass die Standard-Plattformkodierung immer eine lahme 8-Bit-Kodierung ist, obwohl Javas Zeichen Unicode sind. Dann gibt es eine Möglichkeit, wie sie bei einem Codierungsfehler keine Ausnahme auslösen. Sie werden garantiert Mist bekommen. Oder wie wäre es damit:
Was ist der Unterschied? Wussten Sie, dass nur eine davon eine Ausnahme auslöst, wenn Sie einen Codierungsfehler haben? Der Rest macht sie nur mundtot.
Dann gibt es die Idiotie der Java-Zeichen, die nicht ausreichen, um einen Charakter zu halten! Was zur Hölle denken sie? Deshalb nenne ich sie charchars. Sie müssen Code wie diesen schreiben, wenn Sie erwarten, dass er richtig funktioniert:
Und wer denkt jemals daran, das zu tun? Nahe bei niemandem.
Wie viele Charaktere gibt es in
"\uD83D\uDCA9"
? Eins oder zwei? Kommt darauf an, wie man sie zählt. Die Regex-Engine verarbeitet natürlich logische Zeichen, sodass ein Muster^.$
erfolgreich ist und ein Muster^..$
fehlschlägt. Dieser Wahnsinn wird hier demonstriert:Dieser Schwachsinn ist alles, weil man das absolut Vernünftige nicht schreiben kann
\u1F4A9
, und natürlich bekommt man auch keine Warnung, dass man das nicht kann. Es macht einfach das Falsche.Dummkopf.
Während wir gerade dabei sind, ist die gesamte
\uXXXX
Notation angeboren hirntot. Der Java-Präprozessor ( ja, Sie haben es gehört ) hat es vor Java verstanden, und es ist Ihnen untersagt, absolut vernünftige Dinge zu schreiben"\u0022"
, zum Beispiel, wenn Java dies sieht, hat sein Präprozessor es in verwandelt"""
, und Sie verlieren. Oh warte, nicht wenn es in einer Regex ist! Sie können also"\\u0022"
ganz gut verwenden.Riiiiiiiight!
Wussten Sie, dass es in Java keine Möglichkeit gibt, einen
isatty(0)
Anruf zu tätigen? Sie dürfen nicht einmal solche Gedanken denken. Es wäre nicht gut für dich.Und dann gibt es den ganzen Klassenweg Greuel.
Oder die Tatsache, dass es keine Möglichkeit gibt, die Codierung Ihrer Java-Quelldatei in derselben Quelldatei anzugeben, damit Sie sie nicht verlieren? Noch einmal verlange ich zu wissen: WAS HÖLLE HATTE IHR DENKEN?
Stoppen Sie den Wahnsinn! Ich kann nicht glauben, dass die Leute sich diesen Müll gefallen lassen. Es ist ein kompletter Witz. Ich wäre lieber ein Walmart-Begrüßer, als die Schleudern und Pfeile des unverschämten Java-Wahnsinns zu ertragen. Es ist alles kaputt und sie können es nicht nur nicht reparieren, sie werden es auch nicht reparieren.
Dies von den gleichen schelmischen Leuten, die sich auf eine Sprache rühmten, die es illegal machte, eine
printf()
Funktion zu haben . Gee, dass Sie sicher , wirklich gut geklappt, nicht wahr , obwohl !?Bloße Totenköpfe. Schlampen ist ihnen zu nett. Wenn ich in Assembler programmieren wollte, würde ich. Dies ist keine heilsame Sprache. Der Kaiser hat keine Kleider.
Wir hassen es. Wir hassen es für immer . Lass es sterben sterben sterben !
quelle
^H
) :)Funktionszeiger-Deklarationssyntax in C und C ++:
Damit wird ein Funktionszeiger mit dem Namen deklariert,
f
dessen Spitzenwert zweiint
s dauern und ein zurückgeben kannint
.Ich würde eine Syntax wie diese bevorzugen:
g
Angenommen, Sie möchten einen Funktionszeiger deklarieren, dessen Pointee zweiint
s und eine Funktion vonint
undint
nach annehmen kannint
, und ein zurückgebenint
.Mit C- oder C ++ - Notation deklarieren Sie es als:
Mit der oben vorgeschlagenen Notation kann dasselbe deklariert werden als:
Letzteres ist viel intuitiver IMO.
Nebenbei: Die Programmiersprache OOC behebt diese Syntax (und verschiedene andere syntaktische Probleme in C und C ++). Schauen Sie sich hier die Homepage an .
quelle
Ausführlichkeit in Java.
dh:
quelle
const int
zum Beispiel.a+(b*c)/d*e+f/g^20
,BigInteger
in Java zu schreiben . Warum erlaubt diese Sprache keine Bedienerüberladung?\ we \ wouldnt \ fix \ our \ Parser-Namespace-Syntax in PHP
Die Syntax ist nicht nur hässlich, sondern führt zu Verwirrung, wenn neuere Entwickler über Namespaces in Strings nachdenken müssen. (PHP interpoliert Backslashes in Strings in doppelten Anführungszeichen als Escape-Sequenzen. Der Versuch, einen Namespace wie
\you\should\never\do\that
in einem String in doppelten Anführungszeichen anstelle eines Strings in einfachen Anführungszeichen darzustellen, führt zu Zeilenumbrüchen, Tabulatoren und Katastrophen.)quelle
Ich verachte die Tatsache, dass geschweifte Klammern nach einer if / while / for-Anweisung optional sein können.
Vor allem, wenn ich Code wie sehe,
Bitte setzen Sie einfach die Zahnspange ein und fertig.
quelle
for (...) while (...) if (...) { x(); y(); }
wirdfor (...) { while (...) { if (...) { x(); y(); } } }
natürlich besser umgeschrieben als bei entsprechender Einrückung.VBScript hat keine logischen Operatoren
Im Gegensatz zu fast jeder vernünftigen Sprache verwendet VBScript anstelle von logischen Operatoren bitweise Operatoren. Was bedeutet das in der Praxis? Nun, wie Eric Lippert betont :
und
sind in VBScript NICHT gleich!
Schlimmer noch, dies bedeutet, dass es in VBScript keine Kurzschlussauswertung gibt, so dass die folgende Anweisung Ihr Programm zum Absturz bringt, wenn dies der Fall
Blah
istNothing
Richtig, VBScript wertet beide Teile des AND-Vergleichs aus, auch wenn der erste falsch ist! Lass es auf dich einwirken...
quelle
If x Then ... If Not x Then ... End If ... End If
und herausgefunden haben, dass x 2 ist, haben Sie nicht wirklich in VB / VBScript programmiert.EDIT: Nach der Diskussion in den Kommentaren habe ich beschlossen, diese Antwort zu aktualisieren, um mich besser zu erklären.
Ich hasse es wirklich, wie Funktionszeiger in C aussehen. Normalerweise sieht jede Variablendeklaration wie ein Tupel aus:
type varname;
Funktionszeigerdeklarationen sehen dagegen wie eine Deklaration der Funktion mit * vor dem Funktionsnamen aus. Ich kann dies als Beschreibung eines Zeigertyps akzeptieren, aber in C deklariert dies sowohl den Typ als auch den Namen einer Variablen dieses Typs. Dies erscheint mir inkonsistent, da Typdeklarationen sich ansonsten von Variablendeklarationen unterscheiden.struct myStruct{int X; int Y;}
Definiert nur einen Typ, keine benannte VariablemyStruct
. Ebenso sehe ich keinen Grund, Typdeklarationen und Variablendeklarationen in Funktionszeigern zu einer atomaren Anweisung zu gruppieren , noch schätze ich die Abweichung von dertype varname;
Struktur.Jemand wies darauf hin, dass dies mit einer Spiralregel vereinbar ist, und das mag der Fall sein, aber das Kennzeichen einer guten Syntax ist, dass sie selbsterklärend und ihre interne Logik offensichtlich ist. Die Spiralregel ist keineswegs offensichtlich.
quelle
typedef
.Semikolons in VBScript - oder das Fehlen davon
Ich arbeite den ganzen Tag in Sprachen, in denen am Ende jeder Zeile ein Semikolon steht. Fügen Sie am Ende der Zeile in VBScript eins hinzu, und Ihr Code wird nicht mehr ausgeführt.
quelle
In / Out-Argumente. Ich bin alles für Argumente (gut, dass ich das bin), unsere Argumente sind auch in Ordnung, aber ein Argument, das diese beiden Zustände vermitteln muss, ärgert mich.
Was ich hier anstrebe, sind Funktionen, die Eingaben von einem Parameter nehmen und diese Eingabe dann mit einer Ausgabe überschreiben. Es ist in Ordnung, ein Objekt als Referenz zu übergeben, um es zu aktualisieren. Aber, meistens für primitive Typen, ist es nicht richtig für mich, ein Objekt zu nehmen, es zu verwenden und dann vollständig zu ändern. Sie sollten die Bedeutung des Arguments nicht durch ein Inout ändern.
quelle
in
fürin
Argumente entweder, ich bin über sie nur zu reden. Meiner Meinung nach kann nichts ein In / Out-Argument entschuldigen, und es lindert den Schmerz nicht, sie explizit zu machen. Es sollte keinen Grund geben, eine lokale Variable mit einem Wert zu initialisieren, der für die Funktion hilfreich ist, und dieselbe Variable muss dann plötzlich enthalten, was auch immer die Funktion dort ablegen möchte. Diese beiden sollten unterschiedlich sein. Immer.struct
bei dem der neue Wert vom Wert abhängt von einem anderen feld desselbenstruct
.)class
Objekten in C #), die von einer Funktion geändert werden, sind für mich in Ordnung. Abgesehen davon, dass ich nicht konstante Strukturen nicht mag, ist es auch in Ordnung, einstruct
mit demref
Schlüsselwort zu übergeben, um es zu aktualisieren. Was ich wirklich hasse, ist, wenn die Eingabe mit der Ausgabe überschrieben wird. Das beste Beispiel, das ich mir vorstellen kann, ist dieaccept
Funktion von Berkeley Socket : Es braucht einsocklen_t*
Argument, das bei der Eingabe die Größe der übergebenen Zeichen enthalten mussstruct sockaddr*
. und enthält bei der Ausgabe die Anzahl der Bytes, die darauf geschrieben wurden. Das sollte kriminell sein.Array-Deklarationen in C und C ++.
Typischerweise hat eine Variablendeklaration das Format
type variable_name
. Sie können diese Erklärungen leicht von links nach rechts lesen. Aberint foo[size]
sieht zunächst so aus,foo
als würde es als int deklariert , und dann liest man weiter und sieht, dass foo vom Typ "Array von ganzen Zahlen" ist.int[size] foo
liest sich viel besser.Und ich hasse es auch , wenn Programmierer aus einem ähnlichen Grund Zeiger wie folgt erklären:
int *foo
. Aus irgendeinem Grund haben dachte ich nicht aus, das ist die typische Art und Weise es geschrieben ist.quelle
int* a, b;
deklariert * nichta
undb
als Zeiger; nura
ist. Daher ist es besser, es als zu schreibenint *a, b;
(oder noch besser, sie als zwei Deklarationen zu schreiben).*
, nicht an den Typ zu binden.void(int) *f;
? Nö:void (*f)(int);
int* a, b;
Ihnen angesprochene Problem viel ungeheuerlicher.Redundante Parametrierung in Java:
Was andere Art der Parametrierung ist der Compiler denken
foo
haben könnte?quelle
HashMap<String,HashMap<String,String>> foo = Maps.newHashMap();
HashMap<String,HashMap<String,String>> foo = new HashMap<>();
What other type parameterization does the compiler think foo could have?
- Aus welchem Grund auch immer, es handelt sich um einen rohen Typ - als ob irgendjemand mit Verstand rohe und parametrisierte Typen mischen würde.Da sich die Leute bereits über
=
vs. beschwert haben==
, möchte ich auf eine viel schlechtere Alternative hinweisen. PL / Ich hatte beides:=
und=
, aber wenn etwas "offensichtlich" ein Auftrag war, konnte man damit davonkommen=
. Mit können:=
Sie eine Zuweisung erzwingen, wenn der Compiler sie andernfalls als Vergleich interpretiert.Leider hat sich der Compiler nicht immer so entschieden, wie man es erwarten würde. Betrachten Sie nur ein offensichtliches Beispiel:
Nun, für die meisten Leute, die mit den meisten "gewöhnlichen" Sprachen vertraut sind, ist die Bedeutung ziemlich offensichtlich - weisen Sie A und B jeweils 0 zu. PL / I ist nur ein bisschen ... anders. Aus Gründen, die nur den (wahnsinnigen) Designern der Sprache bekannt sind, wird der erste
=
als Aufgabe interpretiert, der zweite=
jedoch als Vergleich. Daher vergleicht dies B mit 0 und ordnet dann das Ergebnis dieses Vergleichs A zu (gemäß der C-Stil-Konvention, dass "falsch" zu 0 und "wahr" zu 1 führt).Wenn B also 0 ist, wird A zu 1. Andernfalls wird A zu 0. Mit anderen Worten: Anstatt A und B denselben Wert zuzuweisen, stellt dies tatsächlich sicher, dass A nicht denselben Wert wie B haben kann.
Fazit: auch wenn die C / C ++ / PHP Stil zunächst scheint wie ein Schmerz, die Alternative ist viel schlimmer 1 .
1 Nun, technisch gibt es eine andere Alternative: Pascal-Stil, bei dem
=
Vergleich und Zuordnung immer erforderlich sind:=
. Nachdem Sie das eine Weile benutzt haben, ist es ziemlich offensichtlich (zumindest für mich), dass Zuweisungen häufiger sind als Vergleiche. Wenn Sie zusätzliches "Zeug" benötigen, um die beiden zu disambiguieren, sollten Sie die Zuweisungen auf jeden Fall einfach und sauber halten Benötigen Sie die zusätzliche "Grunge" für Vergleiche, nicht umgekehrt.quelle
==
für die Gleichstellung und:=
für die Zuordnung zu verwenden. Auf diese Weise haben Sie mehr zu tippen, aber das Vermeiden der Einsamkeit=
hilft, Fehler zu vermeiden.Perl
if($x < 10) do_something();
. Im Moment muss man das entwederdo_something() if($x < 10);
als oder als schreibenif($x < 10) { do_something(); }
.quelle
do_something() if ($x < 10);
ist nicht so schlimmif(..) ...
das Booten, da Sie alle Ausdrücke rechts anordnen können. Aber es gibt Zeiten, die ich wirklich sagen möchteif($x < 10) do_something();
, und es ist bedauerlich, dass Perl mich nicht zulässt.if ($x<10) do_something(); and_call_me();
und sich dann fragen, warum Sie nie einen Anruf erhalten. Ich wünschte, C und Familie würden die Klammern benötigen, um diese Art von Fehler zu verhindern.else
s. (Ich wünschte, es hätteEXPR1 if COND else EXPR2
wie Python)reinterpret_cast<unsigned long>
in c ++. Diese Operation ist nützlich, um mit fremden APIs umzugehen und numerische Präzision zu gewährleisten. Warum sollte es so schmerzhaft sein, sie zu tippen und so hässlich anzusehen?quelle
reinterpret_cast
in C ++ ist ein sehr starker Codegeruch. In 99% der Fälle, in denen Sie es verwenden möchten, sollten Sie dies wahrscheinlich nicht tun müssen - Sie haben wahrscheinlich etwas falsch gemacht. Die anderen 1% der Zeit, in der Sie mit C.reinterpret_cast
kommunizieren, unterbrechen das Typsystem, damit etwas funktioniert, wenn es sonst nicht funktioniert. Das ist normalerweise eine schlechte Sache.Das for ... in- Konstrukt in JavaScript und das foreach- Konstrukt in PHP beim Schleifen über Arrays. Beide machen es einfacher, Fehler zu schreiben als richtigen Code.
quelle
Zeiger von Arrays oder Arrays von Zeigern in C / C ++. Ich bin immer noch verwirrt über diese.
quelle
int[]*
ist ein Zeiger auf ein Array von Ganzzahlen undint*[]
ein Array von Zeigern auf Ganzzahlen. Funktioniert auch gut mitconst
s:int* const
Ist ein konstanter Zeiger auf Ganzzahlen, wohingegenconst int*
undint const*
Zeiger auf konstante Ganzzahlen (oder auf Ganzzahlkonstanten) sind.int (*p)[10];
deklariertp
, ein Zeiger auf ein Array von 10 Zoll zu sein. Wennsizeof (int) == 4
p++
p
Die Tatsache, dass Python auf der Textformatierung beruht.
quelle
Javascript / Java usw., entspricht dem Vergleich, zB wenn (a == 1)
Wie oft schreibe ich, wenn (a = 1)?
Als Mensch habe ich das perfekt gelesen. Aber der verdammte Interpreter / Compiler sagt: "Hey, ich werde 1 zu a zuordnen, dann prüfen, ob a gleich 1 ist, und würden Sie es glauben, ja, das ist es!
Fährt mich die Wand hoch.
if (a == 1) ist weitaus weniger lesbar und der Interpreter / Compiler sollte sowieso wissen, was ich meine; Viele andere kleinere Sprachen (VB) arbeiten seit Hunderten von Jahren erfolgreich daran.
quelle
if (a = true)
soll das heißen?if (a == true)
, schreiben Sie einfachif (a)
. Wenn Sie meintena = true
, dann ist dieif
Aussage überflüssig.Ausführlichkeit in anonymen Java-Klassen. Wird hoffentlich bald behoben.
quelle
structPointer->member
in C / C ++. Kann gut sein, um den Code eines anderen zu lesen, aber ich mag es nicht. Zwei Zeichen statt eines ... was für eine Platzverschwendung!quelle
.
, was für Mitglieder eines Nicht-Zeiger-Objekts gilt. Mehrdeutige Syntax ist schlecht, mmmkay?shared_ptr
, in denen->
auf den enthaltenen Typ zugegriffen wird und.
auf Eigenschaften von sichshared_ptr
selbst zugegriffen wird ? Es tut mir leid, aber hier stimme ich überhaupt nicht zu.->
auf Mitglieder von irgendetwas zugreifen müssen .Mehrzeiliger Code von Scala in Klammern
Zum Beispiel:
Was Sie tatsächlich davon bekommen, ist grandios. Es generiert den Konstruktor und die Getter und Setter für Sie. Aber es ist sicher hässlich und bricht alle meine mentalen Modelle, wie man Code einrückt, und im Grunde fühle ich mich wie in einem bizarren Sandwich mit Java auf der einen Seite und Lisp auf der anderen Seite. (Oh, warte ... das ist eher der Punkt von Scala.)
quelle
val bar
und so weiter) oder den Teil in geschweiften Klammern (der folgende Teilextends Model
)? (Es gibt keine Klammern in diesem Code)