Ich verstehe ein "Idiom" als eine häufige Operation oder ein Muster, das in einer bestimmten Sprache nicht durch die Syntax der Hauptsprache vereinfacht wird, z.
i = i + 1;
In C ++ wird diese Redewendung durch einen Operator vereinfacht:
++i;
Wenn jedoch jemand den Begriff "idiomatisch" verwendet, bin ich mir nicht sicher, wie ich ihn verstehen soll. Was macht ein Stück Code "idiomatisch"?
Antworten:
Eine idiomatische Art, Code zu schreiben, ist, wenn Sie ihn auf eine ganz bestimmte Weise schreiben, da andere Sprachen keine sprachspezifischen Redewendungen haben.
In C ++ führt das Ausnutzen der RAII-ID beispielsweise dazu, dass idiomatische Ressourcen für die Verwaltung von C ++ - Code geschrieben werden.
Ein weiteres Beispiel wäre die Verwendung von Listenverständnissen in Python, um Listen zu generieren. Es ist idiomatisch, weil Sie Listenverständnis in idiomatischem Python verwendet hätten, aber Sie hätten dasselbe auch mit einer Generatorfunktion in einer anderen Sprache oder sogar in Python tun können.
Oft schreibt jemand, der eine neue Sprache versucht, ohne die für diese Sprache spezifischen Redewendungen zu verwenden, keinen Redewendungscode.
quelle
TryAdd()
GenericDictionary
class" erst überprüfe!Contains()
und dann aufrufeAdd()
, ist dies idiomatisch. Ich verwende eine Funktion, die für C # -Erweiterungsmethoden spezifisch ist.Normale Definition
Programmierdefinition
quelle
Idiomatisch im Kontext der Programmierung kann normalerweise definiert werden als "die natürlichste Art, etwas in einer Sprache auszudrücken".
Ich sehe, dass das Wort Idiomatik in Ruby besonders häufig vorkommt. In Ruby gibt es umfangreiche Funktionen zur Metaprogrammierung. Um idiomatischen Ruby-Code zu schreiben, müssen Sie diese normalerweise verwenden.
Beachten Sie, dass nur, weil ein Teil des Codes idiomatisch ist, dies nicht bedeutet, dass er sauber oder sogar kurz ist. Oft müssen Sie Kompromisse eingehen.
Im Grunde genommen bezieht sich Idiomatik am häufigsten auf die gebräuchlichste Art, etwas in einer Sprache zu schreiben, häufig einschließlich "Slang" (Redewendungen). Wenn ein Teil des Codes nicht idiomatisch ist, kann er perfekt lesbar, prägnant, sauber und korrekt sein, in der verwendeten Sprache kann er sich jedoch unangenehm anfühlen / aussehen. Es ist eine Vorliebe des Geschmacks, ob das idiomatische Umschreiben eines solchen Codes tatsächlich eine gute Sache wäre und von Fall zu Fall beurteilt werden muss
Das idiomatische Englisch kann zum Beispiel von der Region abhängen. Die Verwendung des Wortes
bum
ist wahrscheinlich für idiomatisches britisches Englisch erforderlich, während diesbutt
für US-Englisch besser geeignet ist. (Ich kann leider nicht viel Englisch in Großbritannien: /)quelle
Das beste Beispiel, das ich mir aus der Vogelperspektive für etwas Idiomatisches ausdenken kann, stammt von Ruby.
In einer Fülle von Sprachen können Sie iterieren mit:
Oder etwas sehr Ähnliches. Viele Sprachen haben auch ein
foreach(x in SetOfXes)
Konstrukt. Aber die für Ruby typische Iteration umfasst Dinge wie:und sogar
Ich betrachte diese als idiomatisch, weil sie einen Weg darstellen, etwas zu tun, das weniger verbreitet ist und das etwas darstellt, das den Kern der Philosophie seines Bereichs ausmacht. Ruby hat eine Philosophie über die Interaktion mit Objekten, die zwar nicht einzigartig, aber nicht allgegenwärtig ist.
In semantischer Hinsicht vervollständigt mein Gehirn den Gedanken immer dann, wenn ich das Wort idiomatisch höre, automatisch als "idiomatisch für ..." - ich analysiere ihn einfach reflexartig als auf ein bestimmtes Thema bezogen.
quelle
collection.each do |current|
unterscheidet sich vonforeach(current in collection)
? Beide sind Schleifenkonstrukte, diecurrent
auf jedes Element von gesetzt werdencollection
.Redewendungen sind in der Regel die beste Möglichkeit, eine gemeinsame, relativ komplexe Situation in einer Sprache auszudrücken. Inkrementieren ist keine Redewendung oder ähnliches. Wenn Sie Präfixinkrement anstelle von Postfix verwenden, könnten Sie argumentieren, ein C ++ - Idiom zu sein.
Redewendungen sind die beste Möglichkeit, eine Sprache zu verwenden, die von erfahrenen Benutzern festgelegt wird. Ein echtes C ++ - Idiom wären Funktionsobjekte. Eine andere Redewendung wäre RAII. Die Sprache sagt nichts darüber aus, dass Sie Ressourcen im Destruktor freigeben müssen. Aber es ist idiomatisch, dies zu tun. Ein weiteres Beispiel sind Vorlagen - es ist idiomatisch, Vorlagen für alles zu verwenden, was Sie können, aber nichts kann Sie davon abhalten, die Vererbung zu überbeanspruchen.
quelle
Ihre Definition scheint mir nicht richtig zu sein. Ein Idiom ist eine Art, etwas zu schreiben, das in anderen Sprachen möglich oder nicht möglich ist, aber in dieser Sprache üblich ist. Normalerweise ist es kürzer als die Alternative, aber das ist eigentlich keine Voraussetzung.
Es könnte einfacher sein, es zu erklären, indem man darüber spricht, was nicht idiomatisch ist. In C ++ ist es ziemlich idiomatisch zu schreiben:
Es ist noch idiomatischer zu schreiben:
Dieser Code macht genau das Gleiche - einige Leute, die C ++ noch nicht kennen, lesen ihn möglicherweise als Test, um festzustellen, ob p dem entspricht, was die Funktion zurückgibt, aber das ist nicht der Fall.
Vergleichen Sie mit dem, was jemand sehr unidiomatisch schreiben könnte, der aus einer anderen Sprache stammt:
Sie werden auch dieses Zeug als nicht idiomatisch empfinden:
Weil der idiomatische Ansatz ist
Die nicht-idiomatischen Methoden sind nicht falsch, aber für diejenigen, die die Redewendungen kennen, dauert das Tippen in der Regel länger und das Lesen dauert immer länger. Wenn ich dich "der Junge, der den Wolf geweint hat" nenne und du die Geschichte kennst, ist es schneller, als wenn ich erkläre, wie falsche Alarme dazu führen, dass die Leute dich ignorieren. Das Problem ist natürlich, wenn Sie die Geschichte nicht kennen und nicht wissen, was Wölfe mit dem zu tun haben, worüber wir sprechen. Ebenso kann es ein Problem sein, wenn Sie es noch nie gesehen
return x<y;
haben und wirklich nicht wissen, was es tut.quelle
if(Foo* p = SomeThingThatReturnsAFooPointer(arg, param, x, y))
Wenn es mehrere Möglichkeiten gibt, etwas auszudrücken, die gängigste oder allgemein akzeptierte. Verwenden Sie beispielsweise eine strukturierte Anweisung in C anstelle der exakten Entsprechung mit goto-Anweisungen.
quelle