it-swarm-eu.dev

Ist es schlecht, Unicode-Zeichen in Variablennamen zu verwenden?

Ich habe kürzlich versucht, einen Ranking-Algorithmus, AllegSkill, auf Python 3) zu implementieren.

So sieht die Mathematik aus:

alt text

Nein, wirklich.

Das habe ich dann geschrieben:

t = (µw-µl)/c  # those are used in
e = ε/c        # multiple places.
σw_new = (σw**2 * (1 - (σw**2)/(c**2)*Wwin(t, e)) + γ**2)**.5

Ich fand es eigentlich bedauerlich, dass Python 3] Oder ² Nicht als Variablennamen akzeptiert.

>>> √ = lambda x: x**.5
  File "<stdin>", line 1
    √ = lambda x: x**.5
      ^
SyntaxError: invalid character in identifier

Bin ich verrückt? Hätte ich auf eine Version ASCII only) zurückgreifen sollen? Warum? ASCII Nur die Version der oben genannten ist schwieriger auf Gleichwertigkeit mit den Formeln zu überprüfen?

Wohlgemerkt, ich verstehe, dass einige Unicode-Glyphen einander sehr ähnlich sehen und andere wie (oder ist das ▗▖) oder ╦ im geschriebenen Code einfach keinen Sinn ergeben. Dies ist jedoch bei Mathematik- oder Pfeilglyphen kaum der Fall.


Auf Anfrage wäre die Version ASCII only) etwas in der Art von:

winner_sigma_new = ( winner_sigma ** 2 *
                    ( 1 -
                     ( winner_sigma ** 2 -
                       general_uncertainty ** 2
                     ) * Wwin(t,e)
                    ) + dynamics ** 2
                   )**.5

... pro Schritt des Algorithmus.

84
badp

Ich bin der festen Überzeugung, dass nur σ mit s oder sigma wäre dumm und grenzt an hirntot.

Was ist der potenzielle Gewinn? Okay, lass uns nachsehen …

  • Verbessert es die Lesbarkeit? Nein, nicht im geringsten. Wenn das so wäre, hätte die ursprüngliche Formel zweifellos auch lateinische Buchstaben verwendet.

  • Verbessert es die Schreibbarkeit? Auf den ersten Blick ja. Aber am zweiten nein. Weil sich diese Formel niemals ändern wird (nun, "nie"). Normalerweise muss der Code weder geändert noch mithilfe dieser Variablen erweitert werden. Die Schreibbarkeit ist also - nur dieses eine Mal - kein Problem.

Persönlich denke ich, dass Programmiersprachen einen Vorteil gegenüber mathematischen Formeln haben: Sie können aussagekräftige, aussagekräftige Bezeichner verwenden. In der Mathematik ist dies normalerweise nicht der Fall, daher greifen wir auf Ein-Buchstaben-Variablen zurück und machen sie gelegentlich griechisch.

Aber Griechisch ist nicht das Problem. Die nicht beschreibenden Ein-Buchstaben-Kennungen sind.

Behalten Sie also entweder die ursprüngliche Notation bei. Wenn die Programmiersprache Unicode in Bezeichnern unterstützt , gibt es also keine technische Barriere. Oder verwenden Sie aussagekräftige Bezeichner. Ersetzen Sie griechische Glyphen nicht nur durch lateinische Glyphen. Oder arabische oder Hindi.

54
Konrad Rudolph

Persönlich würde ich es hassen, Code zu sehen, in dem ich die Zeichentabelle aufrufen muss, um sie erneut einzugeben. Obwohl der Unicode genau mit dem übereinstimmt, was im Algorithmus enthalten ist, beeinträchtigt dies die Lesbarkeit und die Fähigkeit zum Bearbeiten. Einige Editoren haben möglicherweise nicht einmal eine Schriftart, die dieses Zeichen unterstützt.

Was ist mit einer Alternative und nur oben //µ = u und alles in ASCII schreiben?

34
TheLQ

Dieses Argument setzt voraus, dass Sie kein Problem damit haben, Unicodes einzugeben oder griechische Buchstaben zu lesen

Hier ist das Argument: Möchten Sie pi oder Circular_Ratio?

In diesem Fall würde ich pi dem kreisförmigen Verhältnis vorziehen, weil ich seit meiner Grundschulzeit etwas über pi gelernt habe und ich erwarten kann, dass die Definition von pi für jeden Programmierer, der sein Salz wert ist, gut verwurzelt ist. Daher würde es mir nichts ausmachen, π als Circular_Ratio einzugeben.

Was ist jedoch mit

winner_sigma_new = ( winner_sigma ** 2 *
                    ( 1 -
                     ( winner_sigma ** 2 -
                       general_uncertainty ** 2
                     ) * Wwin(t,e)
                    ) + dynamics ** 2
                   )**.5

oder

σw_new = (σw**2 * (1 - (σw**2)/(c**2)*Wwin(t, e)) + γ**2)**.5

Für mich sind beide Versionen gleichermaßen undurchsichtig, genau wie pi oder π Ist, außer habe ich nicht gelernt diese Formel in der Grundschule. winner_sigma Und Wwin bedeuten nichts für mich oder für andere, die den Code lesen, und die Verwendung von weder σw Macht es besser.

Unter Verwendung beschreibender Namen, z. total_score, winning_ratio Usw. würden die Lesbarkeit viel besser verbessern als die Verwendung von ASCII-Namen, die lediglich griechische Buchstaben aussprechen . Das Problem ist nicht, dass ich keine griechischen Buchstaben lesen kann, aber ich kann die Zeichen (griechisch oder nicht) nicht mit einer "Bedeutung" der Variablen verknüpfen.

Sie haben das Problem sicherlich selbst verstanden, als Sie kommentierten: You should have seen the paper. It's just eight pages.... Das Problem ist, wenn Sie Ihre Variablennamen auf einem Papier basieren, das Einzelbuchstaben aus Gründen der Übersichtlichkeit und nicht der Lesbarkeit auswählt (unabhängig davon, ob sie griechisch sind), müssten die Benutzer das Papier lesen, um die Buchstaben mit a verknüpfen zu können "Bedeutung"; Dies bedeutet, dass Sie eine künstliche Barriere für die Menschen setzen, um Ihren Code verstehen zu können, und das ist immer eine schlechte Sache.

Selbst wenn Sie in einer Nur-ASCII-Welt leben, sind sowohl a * b / 2 Als auch alpha * beta / 2 Eine ebenso undurchsichtige Darstellung von height * base / 2, Der Dreiecksflächenformel. Die Unlesbarkeit der Verwendung von Variablen mit einem Buchstaben nimmt exponentiell zu, da die Formel immer komplexer wird, und die AllegSkill-Formel ist sicherlich keine triviale Formel.

Einzelbuchstabenvariable ist nur als einfacher Schleifenzähler akzeptabel, egal ob es sich um griechische Einzelbuchstaben oder ASCII-Einzelbuchstaben handelt, ist mir egal; Keine anderen Variablen sollten nur aus einem einzelnen Buchstaben bestehen. Es ist mir egal, ob Sie griechische Buchstaben für Ihre Namen verwenden, aber wenn Sie sie verwenden, stellen Sie sicher, dass ich diese Namen mit einer "Bedeutung" verknüpfen kann, ohne irgendwo anders ein beliebiges Papier lesen zu müssen.

In der Grundschule würde es mir definitiv nichts ausmachen, mathematische Ausdrücke mit Symbolen wie: +, -, ×, ÷ für die Grundrechenarten zu sehen, und √ () wäre eine Quadratwurzelfunktion. Nach dem Abschluss der Grundschule würde es mir nichts ausmachen, ein glänzendes neues Symbol hinzuzufügen: ∫ für die Integration. Beachten Sie den Trend, dies sind alles Operatoren. Operatoren werden viel häufiger verwendet als Variablennamen, aber sie werden seltener für eine ganz andere Bedeutung wiederverwendet (in dem Fall, in dem Mathematiker Operatoren wiederverwenden, enthält die neue Bedeutung häufig noch einige grundlegende Eigenschaften der alten Bedeutung; dies ist nicht der Fall bei der Wiederverwendung von Variablennamen).

Zusammenfassend ist es nicht schlecht, Unicode-Zeichen für Variablennamen zu verwenden. Es ist jedoch immer schlecht, Einzelbuchstaben-Namen für Variablennamen zu verwenden, und die Verwendung von Unicode-Namen ist keine Lizenz zur Verwendung von Einzelbuchstaben-Variablennamen.

31
Lie Ryan

Verstehst du den Code? Hat jeder andere, der es lesen muss? Wenn ja, gibt es kein Problem.

Persönlich würde ich mich freuen, die Rückseite des Nur-ASCII-Quellcodes zu sehen.

14
user4051

Ja, du bist verrückt. Ich würde persönlich in einem Kommentar auf das Papier und die Formelnummer verweisen und alles in ASCII schreiben. Dann könnte jeder Interessierte den Code und die Formel korrelieren.

9
zvrba

Ich würde sagen, dass die Verwendung von Unicode-Variablennamen aus zwei Gründen eine schlechte Idee ist:

  1. Sie sind eine PITA zum Tippen.

  2. Sie sehen oft fast genauso aus wie englische Buchstaben. Dies ist der gleiche Grund, warum ich es hasse, griechische Buchstaben in mathematischer Notation zu sehen. Versuchen Sie, Rho von p zu unterscheiden. Es ist nicht einfach.

5
dsimcha

In diesem einen Fall, einer komplexen mathematischen Formel, würde ich sagen, machen Sie mit.

Ich kann sagen, dass ich in 20 Jahren noch nie etwas so komplexes codieren musste und griechische Buchstaben es nahe an der ursprünglichen Mathematik halten. Wenn Sie es nicht verstehen können, sollten Sie es nicht warten.

Wenn ich jemals µ und σ im Moor-Standardcode beibehalten muss, den Sie mir hinterlassen haben, werde ich werde herausfinden, wo Sie leben ...

4
gbn
  • Pro: es sieht gut aus
  • Con: die Unicode-Zeichen und damit die gesamte Bedeutung in der Toolkette verloren gehen (Editor, Code-Formatierer, Versionskontrolle, älterer Compiler)

Wie groß ist das Risiko für Sie? Wiegt der Gewinn das Risiko auf?

3

Irgendwann in nicht allzu ferner Zukunft werden wir alle Texteditoren/IDEs/Webbrowser verwenden, die das Schreiben von Bearbeitungstext einschließlich klassischer griechischer Zeichen usw. vereinfachen. (Oder vielleicht haben wir alle gelernt, dieses "versteckte" zu verwenden "Funktionalität in den Tools, die wir derzeit verwenden ...)

Bis dahin sind jedoch nicht ASCII -Zeichen im Programmquellcode für viele Programmierer schwer zu handhaben und daher eine schlechte Idee, wenn Sie Anwendungen schreiben, die möglicherweise von einer anderen Person verwaltet werden müssen .

(Übrigens ist der Grund, warum Sie griechische Zeichen, aber keine Quadratwurzelzeichen in Python Bezeichner) haben können, einfach. Die griechischen Zeichen werden als Unicode-Buchstaben klassifiziert, aber das Quadratwurzelzeichen ist kein Buchstabe; siehe http://www.python.org/dev/peps/pep-3131/ )

2
Stephen C

Sie haben nicht angegeben, welche Sprache/welchen Compiler Sie verwenden, aber normalerweise lautet die Regel für Variablennamen, dass sie mit einem alphabetischen Zeichen oder Unterstrich beginnen und nur alphanumerische Zeichen und Unterstriche enthalten müssen. Ein Unicode √ wird nicht als alphanumerisch angesehen, da es sich um ein mathematisches Symbol anstelle eines Buchstabens handelt. Allerdings könnte σ sein (da es im griechischen Alphabet steht) und á würde wahrscheinlich als alphanumerisch angesehen werden.

2
tcrosley

Ich habe die gleiche Art von Frage auf StackOverflow gepostet

Ich denke definitiv, dass es sich lohnt, Unicode bei schweren mathematischen Problemen zu verwenden, da es möglich ist, die Formel direkt zu lesen, was mit einfachem ASCII unmöglich ist.

Stellen Sie sich eine Debugging-Sitzung vor: Natürlich können Sie die Formel, die der Code berechnen soll, jederzeit von Hand schreiben, um festzustellen, ob sie korrekt ist. Aber in neunzig Prozent der Fälle werden Sie sich nicht darum kümmern und der Fehler kann für eine lange, lange Zeit verborgen bleiben. Und niemand ist jemals bereit, sich diese abstruse 7-zeilige, einfache ASCII Formel) anzusehen. Natürlich ist die Verwendung von Unicode nicht so gut wie eine tex-gerenderte Formel, aber es ist viel besser .

Die Alternative, lange beschreibende Namen zu verwenden, ist nicht praktikabel, da in der Mathematik die Formel, wenn der Bezeichner nicht kurz ist, noch komplizierter aussieht (warum haben die Menschen um das 18. Jahrhundert "plus" durch "+" ersetzt? und "Minus" durch "-"?).

Persönlich würde ich auch einige tiefgestellte und hochgestellte Zeichen verwenden (ich kopiere sie einfach aus diese Seite ). Zum Beispiel: (hatte python erlaubt √ als Bezeichner)

√ = math.sqrt #function alias
c² = c**2
σʷ² = σʷ**2
γ² = γ**2
σ′ʷ = √(σʷ² * (1 - (σʷ²/c²)*Wʷⁱⁿ(t, e)) + γ²)

Wo ich hochgestellte Zeichen verwendet habe, weil es in Unicode kein tiefgestelltes Äquivalent gibt. (Leider ist der Zeichensatz für den Unicode-Index sehr begrenzt. Ich hoffe, dass das Abonnieren in Unicode eines Tages als diakritisch betrachtet wird, d. H. Eine Kombination aus einem Zeichen für den Index und einem weiteren Zeichen für den tiefgestellten Buchstaben.)

Eine letzte Sache, ich denke, diese Konversation über die Verwendung von Nicht-ASCII-Zeichen ist in erster Linie voreingenommen, da sich viele Programmierer nie mit "formelintensiven mathematischen Notationen" befassen. Sie denken daher, dass diese Frage nicht so wichtig ist, da sie nie einen signifikanten Teil des Codes erlebt haben, der die Verwendung von Nicht-ASCII-Bezeichnern erfordern würde. Wenn Sie einer von ihnen sind (und ich war es bis vor kurzem), bedenken Sie Folgendes: Angenommen, der Buchstabe "a" ist nicht Teil von ASCII. Dann haben Sie eine ziemlich gute Vorstellung von dem Problem, bei der Berechnung nicht trivialer mathematischer Formeln keine griechischen Buchstaben, Indizes oder hochgestellten Zeichen zu haben.

1
Bérenger

ich persönlich bin motiviert, Programmiersprachen in diesem Zusammenhang als Werkzeug für Mathematiker zu betrachten, da ich eigentlich keine Mathematik verwende, die in meinem Leben so aussieht. : D Und sicher, warum nicht ɛ oder σ oder was auch immer verwenden - in diesem Zusammenhang ist es tatsächlich mehr lesbar.

(Obwohl ich sagen muss, würde ich es vorziehen, hochgestellte Zahlen als direkte Methodenaufrufe zu unterstützen, nicht als Variablennamen. ZB 2² = 2 ** 2 = 4 usw.)

0
roberto

Ist dieser Code nur für Ihr persönliches Projekt? Wenn ja, verrückt werden, verwenden Sie, was Sie wollen.

Ist dieser Code für andere gedacht? d.h. und irgendeine Open-Source-App? In diesem Fall fragen Sie wahrscheinlich nur nach Problemen, da verschiedene Programmierer unterschiedliche Editoren verwenden und Sie nicht sicher sein können, dass alle Editoren Unicode korrekt unterstützen. Außerdem wird es nicht in allen Befehlsshells korrekt angezeigt, wenn die Quellcodedatei typisiert/cat'd ist, und es kann zu Problemen kommen, wenn Sie sie in HTML anzeigen müssen.

0
GrandmasterB