Czy źle jest używać znaków Unicode w nazwach zmiennych? [Zamknięte]

82

Niedawno próbowałem zaimplementować algorytm rankingu, AllegSkill, w Pythonie 3.

Oto jak wygląda matematyka:

alternatywny tekst

Nie naprawdę.

Oto co napisałem:

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

Właściwie uważałem, że niefortunne jest dla Pythona 3 nieakceptowanie lub ²nazw zmiennych.

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

Czy oszalałem? Czy powinienem skorzystać z wersji tylko ASCII? Dlaczego? Czy nie byłoby trudniej zweryfikować powyższej wersji tylko ASCII pod kątem równoważności z formułami?

Pamiętaj, że rozumiem, że niektóre glify Unicode wyglądają bardzo podobnie do siebie, a niektóre jak ▄ (lub to, że ▗▖) lub ╦ po prostu nie mają sensu w pisanym kodzie. Nie dotyczy to jednak matematyki ani glifów strzałek.


Na żądanie wersja tylko ASCII byłaby czymś w rodzaju:

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

... na każdym kroku algorytmu.

badp
źródło
58
To szalone, całkowicie nieczytelne i niewymownie fajne.
Dominique McDonnell,
2
Mówiąc o Unicode ... codinghorror.com/blog/2008/03/i-entity-unicode.html
CoderHawk
3
Uważam za bardzo dobrą rzecz, że Python nie akceptuje operacji arytmetycznych jako zmiennych. Znak pierwiastka kwadratowego powinien oznaczać operację pobrania pierwiastka kwadratowego i nie powinien być zmienną.
David Thornley,
4
@ David, w Pythonie nie ma takiego rozróżnienia. Rzeczywiście, sqrt = lambda x: x**.5robi mi funkcję (dokładniej wywoływalnym) sqrt(2) => 1.41421356237.
badp
4
OutputStream.🚽;

Odpowiedzi:

54

Mocno czuję, że po prostu zastąpienie σgo slub sigmabyłoby głupie, graniczące z martwym mózgiem.

Jaki jest potencjalny zysk? Więc, zobaczmy …

  • Czy poprawia to czytelność? Nie, nie w najmniejszym stopniu. Gdyby tak było, oryginalna formuła niewątpliwie użyłaby także liter łacińskich.

  • Czy poprawia zapisywalność? Na pierwszy rzut oka tak. Ale z drugiej strony nie. Ponieważ ta formuła nigdy się nie zmieni (cóż, „nigdy”). Zwykle nie będzie potrzeby zmiany kodu ani rozszerzania go za pomocą tych zmiennych. Tak więc zapisywalność - nie tylko raz - nie stanowi problemu.

Osobiście uważam, że języki programowania mają jedną przewagę nad formułami matematycznymi: możesz używać znaczących, ekspresyjnych identyfikatorów. W matematyce zwykle tak się nie dzieje, dlatego sięgamy po zmienne jednoliterowe, od czasu do czasu czyniąc je greckimi.

Ale grecki nie jest problemem. Nieopisowe jednoliterowe identyfikatory to.

Więc albo zachować oryginalny zapis ... Po tym wszystkim, jeśli język programowania nie obsługują Unicode w identyfikatorach, więc nie ma bariery techniczne. Lub użyj znaczących identyfikatorów. Nie zamieniaj greckich glifów na łacińskie. Arabskie lub hindi.

Konrad Rudolph
źródło
3
Niektóre narzędzia nie potrafią odczytać znaków Unicode, mimo że język programowania obsługuje ich użycie. Nie nazwałbym tego bezmyślną decyzją używania nazw zmiennych innych niż Unicode, a to nadal obowiązuje 2,5 roku po twoim poście.
Gary S. Weaver,
44
@Gary „Niektóre narzędzia nie potrafią odczytać Unicode” - więc zmień narzędzia, to bzdury. Przepraszamy, jest rok 2013 i mam zerową sympatię, a jeszcze mniej cierpliwości dla takich narzędzi. Ciągłe zaopatrywanie w wadliwe narzędzia uniemożliwia postęp.
Konrad Rudolph
3
@KonradRudolph Chodzi mi o to, że niektóre narzędzia nie obsługują i nie obsługują Unicode z jakiegokolwiek powodu, więc „zmiana narzędzi” nie zawsze jest właściwą odpowiedzią. Zgadzam się, że Unicode jest dobry i narzędzia powinny go zrozumieć, ale nie zawsze jest to opcja.
3
@John Uważam, że „zmiana narzędzi” jest właściwą odpowiedzią. W szczególności twój przykład ilustruje taki przypadek: .propertiespliki Java są łatwe do przeanalizowania. Jeśli naprawdę zdarzyło Ci się pracować z łańcuchem narzędzi, który, wspierany przez .propertiespliki, nie obsługiwał Unicode, całkowicie uzasadnione jest porzucenie tego łańcucha narzędzi (i samodzielne jego zastąpienie, znalezienie alternatywy lub, w najgorszym przypadku, uruchomienie jednego z nich ). Oczywiście nie dotyczy to starszych systemów. Jednak w przypadku starszych systemów nie ma zastosowania żadna uwaga dotycząca najlepszych praktyk.
Konrad Rudolph
8
Te problemy „wymiany”, o których mówisz, wydają się być przede wszystkim problemem programistów Java i Windows. Większość świata Linuksa została znormalizowana na UTF-8 ponad dziesięć lat temu. To zdecydowanie problem z łańcuchem narzędzi. Przestań używać złych narzędzi.
bogate przypomnienie
33

Osobiście nie chciałbym widzieć kodu, w którym muszę wyświetlić mapę znaków, aby wpisać ją ponownie. Mimo że Unicode ściśle pasuje do tego, co jest w algorytmie, to naprawdę szkodzi czytelności i możliwości edycji. Niektórzy redaktorzy mogą nawet nie mieć czcionki obsługującej ten znak.

Co powiesz na alternatywę i po prostu doładuj //µ = ui napisz wszystko w ascii?

TheLQ
źródło
14
Nawiasem mówiąc, nie zakładaj, że wszystkie klawiatury odsłaniają standardowe klawisze kodujące wygodnie. Mój układ klawiatury wymaga trzech klawiszy do pisania {i }(co się nie udaje w ttys btw) i kompletnie brakuje `i ~... jak żaden skrypt Bash nie wymagałby ode mnie używania mapy znaków, jeśli nie używałbym niestandardowej mapy klawiszy? :)
badp
4
Zainstalowałem grecką klawiaturę obok mojej natywnej i mogę przełączać się między tymi za pomocą jednego klawisza. Jest to przydatne, gdy mówimy o matematyce w wiadomościach błyskawicznych / e-mailach ... a ja już myślałem o użyciu jej w skryptach Pythona.
liori
18
Ugh. Zastępujesz tylko litery greckie zwykłymi? Żadnego zysku. Użyj znaczących nazw zmiennych lub trzymaj się nazw z papieru. Nie ma powodu do kreatywności.
Konrad Rudolph
12
Tylko nie mieszaj µ i μ ...
endolith
4
Rozsądni redaktorzy dysponują rozsądnymi metodami wprowadzania kodu Unicode, które ułatwiają edycję kodu w ten sposób. Na przykład Emacs obsługuje (między innymi) TeXi rfc1345. TeXtak to brzmi; pozwala pisać \sigmadla σi \todla . rfc1345daje kilka kombinacji takich jak &s*for σi &->for . Zasadniczo nie martwię się o przystosowanie programistów używających edytorów mniej zdolnych niż Emacsa.
Tikhon Jelvis,
31

Ten argument zakłada, że ​​nie masz problemu z pisaniem Unicodów ani czytaniem greckich liter

Oto argument: czy chciałbyś pi czy circular_ratio?

W tym przypadku wolałbym pi od circular_ratio, ponieważ dowiedziałem się o pi, odkąd byłem w szkole podstawowej i mogę się spodziewać, że definicja pi jest dobrze zakorzeniona dla wszystkich programistów wartych jego soli. Dlatego nie miałbym nic przeciwko wpisaniu π, aby oznaczać okrągły_ratio.

A co z tym?

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

lub

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

Dla mnie obie wersje są równie nieprzejrzyste, tak jak pilub πsą, z tym wyjątkiem , że nie nauczyłem się tej formuły w szkole podstawowej. winner_sigmai Wwinnic dla mnie nie znaczy ani dla kogokolwiek, kto czyta kod, a użycie żadnego z nich σwnie poprawi go.

Tak więc, używając opisowych nazw, na przykład total_score, winning_ratioitd zwiększyłoby czytelność znacznie lepsze niż przy użyciu nazwy ASCII jedynie wymawia greckie litery . Problemem nie jest to, że nie mogę odczytać greckich liter, ale nie mogę skojarzyć znaków (greckich lub nie) z „znaczeniem” zmiennej.

Na pewno rozumiał problem siebie, gdy powiedział: You should have seen the paper. It's just eight pages.... Problem polega na tym, że jeśli nazewnictwo zmiennych opiera się na papierze, który wybiera zwięzłość liter zamiast zwięzłości (bez względu na to, czy są greckie), wówczas ludzie musieliby przeczytać gazetę, aby móc skojarzyć litery z literą "znaczenie"; oznacza to, że stwarzasz sztuczną barierę, aby ludzie mogli zrozumieć Twój kod, a to zawsze jest złe.

Nawet jeśli mieszkasz w ASCII tylko świata, zarówno a * b / 2i alpha * beta / 2są równie nieprzejrzysta rendering height * base / 2, formuła obszar trójkąta. Nieczytelność użycia zmiennych jednowymiarowych rośnie wykładniczo wraz ze wzrostem złożoności formuły, a formuła AllegSkill z pewnością nie jest formułą trywialną.

Zmienna z pojedynczymi literami jest akceptowana tylko jako prosty licznik pętli, bez względu na to, czy są one greckimi pojedynczymi literami, czy pojedynczymi literami ascii, nie obchodzi mnie to; żadne inne zmienne nie powinny składać się wyłącznie z jednej litery. Nie dbam o to, czy używasz greckich liter do swoich imion, ale kiedy ich używasz, upewnij się, że mogę skojarzyć te imiona z „znaczeniem” bez konieczności czytania dowolnego artykułu w innym miejscu.

Będąc w szkole podstawowej, zdecydowanie nie miałbym nic przeciwko widzeniu wyrażeń matematycznych wykorzystujących symbole takie jak: +, -, ×, ÷, dla podstawowej arytmetyki, a √ () byłaby funkcją pierwiastka kwadratowego. Po ukończeniu szkoły podstawowej nie miałbym nic przeciwko dodaniu nowych błyszczących symboli: ∫ do integracji. Zwróć uwagę na trend, to są wszyscy operatorzy. Operatory są znacznie częściej używane niż nazwy zmiennych, ale rzadziej są ponownie wykorzystywane do zupełnie innych znaczeń (w przypadku, gdy matematycy ponownie używają operatorów, nowe znaczenie często ma pewne podstawowe właściwości starego znaczenia; nie jest tak w przypadku przy ponownym użyciu nazw zmiennych).

Podsumowując, nie, nie jest źle używać znaków Unicode w nazwach zmiennych; jednak zawsze źle jest używać nazw liter o pojedynczych literach w nazwach zmiennych, a możliwość używania nazw w Unicode nie jest licencją na używanie nazw liter o zmiennej nazwie.

Lie Ryan
źródło
9
Szczerze mówiąc, formuły tutaj nie mają większego sensu, nawet gdybym miał użyć error_on_measured_skill_with_99th_percent_confidencezamiast nich sigma.
badp
4
@badp: Długie imiona! = Dobre imiona. Niemniej jednak zdarzają się sytuacje, w których nie można wybrać dobrego imienia (np. Gdy rozumiesz tylko formułę, ale nie do końca rozumiesz, co robią poszczególne części formuły (co wymaga zupełnie innego poziomu zrozumienia)), w takim przypadku drugą najlepszą alternatywą jest zatuszowanie twojego tyłka kilkoma komentarzami (lepiej niż wysłanie ich na zewnętrzną gazetę). Dodaj słownik danych, który wyjaśnia, do czego odnoszą się nazwy zmiennych, np. // σw = skill level measurement errorItp.
Lie Ryan
1
@badp: Szczerze mówiąc, z tą samą informacją, że sigma odnosi się do jakiegoś czynnika krówki (że tak powiem), pozwala mi nieco lepiej zrozumieć formułę niż to, co uderza mnie sigma. Kiedy formuła jest trudna do zrozumienia na początku, nie chcesz na niej dodawać więcej nieprzezroczystości.
Lie Ryan,
2
Tak. To. Niestety przeoczyłem to podczas pisania odpowiedzi.
Konrad Rudolph
3
Cóż, każdy, kto pracuje we wszystkim, co dotyczy statystyki, wie, że σ oznacza „odchylenie standardowe”. Jest to bardzo dobrze znany standardowy symbol w tej dziedzinie.
TRiG
14

Czy rozumiesz kod? Czy wszyscy inni, którzy muszą to przeczytać? Jeśli tak, nie ma problemu.

Osobiście chętnie zobaczę tył kodu źródłowego zawierającego tylko ASCII.


źródło
Gotowy. (Zakładam, że w ostatnim wierszu chciałeś zobaczyć wersję kodu ASCII?) [] (Http: // ~)
badp
4
@badp: Nie, to ja prosiłem o śmierć kodu tylko ASCII.
dopóki nie zobaczysz, co stanie się z plikami źródłowymi Unicode podczas lądowania w systemie Windows 1252 ...
1
@ Thorbjørn: jeśli zawierają BOM, to mam nadzieję, że nic się nie wydarzy.
9

Tak, oszalałeś. Osobiście odniósłbym się do komentarza do numeru papieru i formuły i zapisałbym wszystko prosto w ASCII. Wówczas każdy zainteresowany byłby w stanie skorelować kod i formułę.

zvrba
źródło
5
Trudno mi było upewnić się, że kod i formuła pasują w pierwszej kolejności ...
badp
10
@Paul: na szczęście Unicode ma ponad 10 lat, więc załatwiono sprzeciw. I chociaż nie ma wyraźnego zwycięzcy między różnymi UTF, to nie jest problem: nie było takiego. Rozróżnianie ich jest trywialne dla oprogramowania.
Konrad Rudolph
1
@Konrad: To znaczy 10 lat od teraz . Spora liczba programów nadal nie obsługuje Unicode. Ponadto nie zgadzam się z twoim twierdzeniem - napisanie ogólnej procedury odwrotnej, która obsługuje wszystkie 3 utfs, nie jest trywialne. Musi być wyraźny zwycięzca. Obsługa 3 różnych UTF nie ma sensu (nie rozważmy, że pozostałe strony kodowe nadal istnieją).
Paul Nathan
3
@Paul: Jak często trzeba pisać „ogólną procedurę odwrotną”? Trzy UTF służą różnym celom i nie sądzę, że kiedykolwiek dostaniesz życzenie konsolidacji.
Dean Harding
7
@Paul: przykręć te programy. Istnieje wystarczająco dużo dobrych edytorów, którzy wiedzą, jak obsługiwać Unicode. Jeśli jakiś redaktor nadal nie jest w modzie, pozwól, aby zajął się tym wybór ekonomiczny. I jak powiedział Dean, UTF służą różnym celom. Jest to dobra rzecz, że one istnieją. I nie widzę sensu w twoich wielu procedurach odwrotnych. Musisz go napisać tylko raz (na razie ignorując formularze normalizacyjne): dla punktów kodowych, a nie dla poszczególnych UTF.
Konrad Rudolph,
5

Powiedziałbym, że używanie nazw zmiennych Unicode to zły pomysł z dwóch powodów:

  1. To PITA do pisania.

  2. Często wyglądają prawie tak samo jak litery angielskie. Z tego samego powodu nienawidzę patrzeć na greckie litery w notacji matematycznej. Spróbuj powiedzieć rho oprócz p. To nie jest łatwe.

dsimcha
źródło
6
Zależy, czego używasz do ich wpisywania.
endolith
4

W tym jednym przypadku, złożona formuła matematyczna, powiedziałbym, że idź.

Mogę powiedzieć, że przez 20 lat nigdy nie musiałem kodować czegoś tak złożonego, a greckie litery trzymają to blisko pierwotnej matematyki. Jeśli nie możesz tego zrozumieć, nie powinieneś go utrzymywać.

Mówiąc, że jeśli kiedykolwiek musiał utrzymać ľ i Ď w torfowiska standardowy kod, który mi pozostawił, ja będzie dowiedzieć się, gdzie mieszkasz ...

gbn
źródło
3
  • Pro: ładnie wygląda
  • Przeciw: znaki Unicode, więc całe znaczenie może zgubić się w łańcuchu narzędzi (edytor, formatator kodu, kontrola wersji, starszy kompilator)

Jak duże jest dla ciebie ryzyko? Czy zysk przewyższa ryzyko?

LennyProgrammers
źródło
2
Łańcuch narzędzi? Jaki łańcuch narzędzi?
badp
2
Edytor, formatyzator kodu, kontrola wersji, starszy kompilator. Każde narzędzie i osoba dotykająca twojego pliku. Mam złe doświadczenia z narzędziami, które psują pliki Unicode, YMMV.
LennyProgrammers,
2

W niedalekiej przyszłości wszyscy będziemy używać edytorów tekstu / IDE / przeglądarek internetowych, które ułatwiają pisanie tekstu edycji, w tym klasycznych greckich znaków itp. (A może wszyscy nauczymy się używać tego „ukrytego” „funkcjonalność narzędzi, z których obecnie korzystamy ...)

Ale dopóki tak się nie stanie, wielu programistów nie jest w stanie obsłużyć znaków innych niż ASCII w kodzie źródłowym programu, dlatego jest to zły pomysł, jeśli piszesz aplikacje, które mogą wymagać konserwacji przez kogoś innego.

(Nawiasem mówiąc, powód, dla którego możesz mieć znaki greckie, ale nie znaki pierwiastka kwadratowego w identyfikatorach Pythona, jest prosty. Znaki greckie są klasyfikowane jako litery Unicode, ale znak pierwiastka kwadratowego nie jest literą; patrz http://www.python.org / dev / peps / pep-3131 / )

Stephen C.
źródło
Myślę, że dobrym pomysłem byłoby utworzenie edytora IME, który mógłby tłumaczyć znaki dla użytkowników, którzy nie mogą ich bezpośrednio wpisać.
AndrejaKo
Tak, mniej więcej kiedy przejdziemy na DVORAK. :(
badp
1
@AndrejaKo Linux ma edytor IME, który akceptuje polecenia w stylu LaTeX - to znaczy, \muże piszesz i wpisuje µ.
badp
@badp Wielkie dzięki! Spróbuję to przy następnym uruchomieniu!
AndrejaKo,
Emacs obsługuje wiele dobrych metod wprowadzania, które ułatwiają pisanie symboli Unicode. (W tym TeX, którego używam.) Emacs nie jest wcale futurystyczny. (To jest oczywiście niesamowite.)
Tikhon Jelvis,
2

Nie powiedziałeś, jakiego języka / kompilatora używasz, ale zwykle reguła dla nazw zmiennych jest taka, że ​​muszą zaczynać się od znaku alfabetu lub znaku podkreślenia i zawierać tylko znaki alfanumeryczne i znaki podkreślenia. Unikod √ nie byłby uważany za alfanumeryczny, ponieważ jest to symbol matematyczny zamiast litery. Jednak σ może być (ponieważ jest to alfabet grecki), a á prawdopodobnie będzie uważane za alfanumeryczne.

tcrosley
źródło
1

Zadałem to samo pytanie na StackOverflow

Zdecydowanie uważam, że warto stosować Unicode w ciężkich problemach matematycznych, ponieważ umożliwia bezpośrednie odczytanie formuły, co jest niemożliwe w przypadku zwykłego ASCII.

Wyobraź sobie sesję debugowania: oczywiście zawsze możesz ręcznie napisać formułę, którą kod ma obliczyć, aby sprawdzić, czy jest poprawna. Ale w dziewięćdziesięciu procentach czasu nie będziesz się tym przejmować, a błąd może pozostać ukryty przez długi, długi czas. I nikt nigdy nie chce spojrzeć na tę zawiłą, 7-liniową, prostą formułę ASCII. Oczywiście użycie Unicode nie jest tak dobre, jak formuła renderowana przez tex, ale jest o wiele lepsze.

Alternatywa polegająca na stosowaniu długich nazw opisowych nie jest wykonalna, ponieważ w matematyce, jeśli identyfikator nie jest krótki, formuła będzie wyglądać jeszcze bardziej skomplikowana (jak myślisz, dlaczego ludzie około XVIII wieku zaczęli zamieniać „plus” na „+” i „minus” przez „-”?).

Osobiście użyłbym także niektórych indeksów dolnych i górnych (po prostu kopiuję i wklejam je z tej strony ). Na przykład: (miał dozwolone python √ jako identyfikator)

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

Gdzie użyłem indeksu górnego, ponieważ nie ma odpowiednika indeksu dolnego w Unicode. (Niestety zestaw znaków w indeksie Unicode jest bardzo ograniczony. Mam nadzieję, że pewnego dnia indeksowanie w Unicode będzie traktowane jako znaki diakrytyczne, tj. Kombinacja jednego znaku dla indeksu dolnego i drugiego znaku dla subskrybowanej litery)

I ostatnia rzecz, myślę, że ta rozmowa na temat używania znaków spoza ASCII jest przede wszystkim stronnicza, ponieważ wielu programistów nigdy nie zajmuje się „notacjami matematycznymi intensywnie wykorzystującymi formuły”. Uważają więc, że to pytanie nie jest tak ważne, ponieważ nigdy nie doświadczyli znacznej części kodu, która wymagałaby użycia identyfikatorów innych niż ASCII. Jeśli jesteś jednym z nich (a ja byłem do niedawna), zastanów się nad tym: załóżmy, że litera „a” nie jest częścią ASCII. Wtedy będziesz miał całkiem niezły pomysł na problem z brakiem greckich liter, indeksów dolnych i górnych podczas obliczania nietrywialnych formuł matematycznych.

Bérenger
źródło
0

Czy ten kod jest tylko dla twojego osobistego projektu? Jeśli tak, zwariuj i użyj, co chcesz.

Czy ten kod jest przeznaczony dla innych? tj. i jakaś aplikacja typu open source? Jeśli tak, prawdopodobnie pytasz o kłopoty, ponieważ różni programiści używają różnych edytorów i nie możesz być pewien, że wszystkie edytory będą poprawnie obsługiwały Unicode. Ponadto nie wszystkie powłoki poleceń wyświetlają go poprawnie, gdy plik kodu źródłowego jest typu / cat'd, i możesz napotkać problemy, jeśli chcesz go wyświetlić w formacie HTML.

Grandmaster B.
źródło
0

osobiście jestem zmotywowany do rozważenia języków programowania jako narzędzia dla matematyków w tym kontekście, ponieważ w rzeczywistości nie używam matematyki, która wygląda tak w moim życiu. : D I jasne, dlaczego nie użyć ɛ, σ lub cokolwiek innego - w tym kontekście jest to właściwie bardziej czytelne.

(Chociaż, muszę powiedzieć, wolę wspierać numery w indeksie górnym jako bezpośrednie wywołania metod, a nie nazwy zmiennych. Np. 2² = 2 ** 2 = 4 itd.)

roberto
źródło
-2

Co jest, do cholery σ, co jest W, co jest ε, ca co γ?
Nazwij swoje zmienne w sposób, który wyjaśnia ich cel.
Osobiście pobiłbym każdego, kto zostawiłby wersję Unicode lub ASCII, abym mógł to utrzymać, chociaż wersja ASCII jest lepsza.

Czym jest zło jest wywołanie zmienne σlub slub sigmalub valuelub var1, ponieważ nie przekazuje żadnych informacji.

Zakładając, że piszesz swój kod po angielsku (jak uważam, że powinieneś, skądkolwiek jesteś), ASCII powinno wystarczyć do nadania zmiennym znaczących nazw, więc nie ma potrzeby używania Unicode.

back2dos
źródło
2
co jeśli skopiował / wkleił artykuł, a następnie umieścił go jako część swojego kodu źródłowego jako komentarz pomimo nazw zmiennych o jednym znaku?
Brian
19
Wiele z tych nazw zmiennych ma silne znaczenie dla osób zaznajomionych z dziedziną problemową. Dla kogoś znającego domenę angielskie nazwy mogą być mniej czytelne niż nazwy takie jak sigma lub rho.
dsimcha
3
Obawiam się, że coś takiego rank_error_with_99_pct_confidencejest na to trochę za długie i właściwie nie ułatwiłoby zrozumienia formuł. AllegSkill / TrueSkill nazywają te sigma, więc uważam, że całkowicie akceptowalne jest dla mnie zachowanie nazwy specyficznej dla domeny.
badp
3
@badp: dobre nazwy są zwięzłe i opisowe; ale nie musi być w pełni opisowy. Dla twojej sigmy doskonale jest użyć rank_errori umieścić dodatkowe szczegóły na temat 99-procentowego zaufania do dokumentacji / komentarza.
Lie Ryan,
1
@dsimcha: Myślę, że osoby zaznajomione z określoną domeną są znacznie rzadsze niż ci, którzy nigdy o niej nie słyszeli. I myślę, że osoby zaznajomione z domeną będą w stanie poradzić sobie z prostymi angielskimi nazwami, podczas gdy ci, którzy nie znają tej domeny, nie będą w stanie zrozumieć, co się dzieje, jeśli wszystko jest zaciemnione przez greckie zmienne jednoliterowe.
back2dos,
-2

W przypadku nazw zmiennych o znanym pochodzeniu matematycznym jest to absolutnie dopuszczalne - nawet preferowane. Ale jeśli kiedykolwiek spodziewasz się rozpowszechniać kod, powinieneś umieścić te wartości w module, klasie itp., Aby automatyczne uzupełnianie IDE mogło obsługiwać „wpisywanie” dziwnych znaków.

Używanie √ lub ² w identyfikatorze - nie tyle.

bogate przypomnienie
źródło