Durne nazwy zmiennych

Durne nazwy zmiennych
Grzyboo
  • Rejestracja:ponad 9 lat
  • Ostatnio:4 miesiące
  • Postów:206
0

Mały background, pokazujący jedną z tysięcy takich sytuacji. Ta miała miejsce dzisiaj.
Wyszukuję sobie jak przesłać za pomocą Socketów plik. Znajduję coś takiego: http://www.rgagnon.com/javadetails/java-0542.html

Patrzę i nie rozumiem nic, bo muszę odszyfrowywać linijka po linijce kod. Jak w pieprzonym asemblerze bez komentarzy. Kod programu jest tutaj bardzo adekwatny, ponieważ to faktycznie jest napisane jakimś kodem.
Czy ktoś jest mi w stanie wytłumaczyć czemu ogromna część programistów wzięła sobie za punkt honoru, aby KAŻDA nazwa zmiennej była skrótem / literą? Dlaczego taki bałwan nie może napisać jednoznacznie: Socket socket.
Zamiast tego daje zmienna sock, co według wielu słowników angielsko-polskich znaczy skarpeta. Dzisiaj dowiedziałem się, że networking w Javie może być zapewniony przez obiekty skarpet.

Zamiast spojrzeć na kod programu i go rozumieć to muszę odszyfrowywać albo pozamieniać te is, bos, cs, ds, gi, i, j, sock, obj, itm, stkovflw, knstntnpltnczkwczwna na normalne, wymowne nazwy. Trochę mnie to frustruje i zaczynam kwestionować moją przyszłą karierę programisty, gdzie w takim gównokodzie napisanym przez Andrzeja po 10-godzinnym kursie programowania albo studenta informatyki na wydziale politologii trzeba będzie się babrać. Tutaj, w prostym przykładzie poświęcę 2 minuty i napiszę to po ludzku, ale w dużym projekcie może to być kiepskim pomysłem.

grzesiek51114
grzesiek51114
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:2442
0

No co Ty? Na studiach nie byłeś, że Cię bulwersują takie rzeczy jak ten kod powyżej? :D

krzysiek050
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 4 lata
  • Postów:1272
1

To dobrze że kwestionujesz. Kod nigdy nie będzie taki piękny jak Ci się wydaje. Jeżeli czepiasz się już do nazw zmiennych, to uwierz mi, że to dopiero początek. Oczywiście nie twierdzę że tak jest ok. Każdy powinien dbać o kod, ale dobry programista to nie ten co pisze dobry kod, ale ten który pisze dobry kod, a umie pracować ze słabym. Tak więc, jeżeli taka błahostka jest dla Ciebie frustrująca, to nie jest zawód dla Ciebie.

W0
  • Rejestracja:ponad 12 lat
  • Ostatnio:21 minut
  • Postów:3543
1

Problem jest tylko taki, że nazwy w podanym przykładzie są - według mnie - OK.

Co tam jest według ciebie nie tak? "fis", "bis", "fos"? Czy "current", "bytesRead"? Chyba tylko do "mybytearray" bym się mógł przyczepić za brak camelCase.

wujnia
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 7 lat
  • Postów:161
0

Wprawdzie ja z C ale swoje 3 grosze wtrące.

Nie pisałbym tego na capsie.
public final static int SOCKET_PORT = 13267; // you may change this

FileInputStream fis = null; // dalbym is_file 1
BufferedInputStream bis = null; // is_buff

Dorzuciłbym jeszcze że zamiast cosTakiego preferuję cos_takiego.
Jak dla mnie kod raczej czytelny, wprawdzie ja z java jestem zero ale widać co się dzieje z grubsza.

edit:
Może file_is buff_is bo is_file wygląda jak pytanie. No ale lepsze niż fis / bis.

edytowany 5x, ostatnio: wujnia
jarekr000000
normalnie notacja węgierska
Shalom
W javie to sa standardy nazywania zmiennych. Statici capsem a inne zmienne i metody camelCase. To co sugerujesz to notacja pythona.
W0
  • Rejestracja:ponad 12 lat
  • Ostatnio:21 minut
  • Postów:3543
0

@wujnia:
To kod Java, czyli camelCase, czyli cosTakiego, a nie cos_takiego. SOCKET_PORT też jest zgodny z wytycznymi od Oracle'a.

Znalazłem tylko dwie rzeczy (streamy, czyli "fis", "bis", "bos" i mybytearray zamiast myByteArray), ale one nie są jakimś megaprzestępstwem. Lepsze to niż np.

Kopiuj
	int i,j,k,l,m,n,o;
	// ... operacje na tych zmiennych

        i = k > l ? k : m > l ? m : n > l ? n > l ? n : j : l;
Grzyboo
Tak, a może nawet gorzej wyglądają kolokwia z programowania na niektórych prestiżowych uczelniach :)
wujnia
rozumiem ale mam swoje zdanie na ten temat ;-)
Potat0x
  • Rejestracja:ponad 8 lat
  • Ostatnio:15 dni
  • Postów:370
0

Kod albo pseudokod algorytmu. Początek:

Kopiuj
int n, p, k, j, x, w;

i już wiem, że będzie fajnie.
//edit: nie przeczytałem postu wyżej i wyszedł klon :/

edytowany 2x, ostatnio: Potat0x
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 13 godzin
4

Ten kod nie jest zły. fis i bis to oczywiście skróty nazw odpowiednich typów. Sam tak nazywam zmienne będące „lokalnymi singletonami”, czyli jedynymi zmiennymi danego typu w okolicy.

Potrzebujesz w funkcji obiektu FileInputStream, i będzie to jedyny obiekt tego typu w funkcji? To po co wymyślać mu jakąś inną nazwę, skoro innego FileInputStreamu nie ma.

Gorzej gdyby się nazywał x.

edytowany 1x, ostatnio: Azarien
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:3 dni
  • Lokalizacja:Wrocław
4
Potat0x napisał(a):

Kod albo pseudokod algorytmu. Początek:

Kopiuj
int n, p, k, j, x, w;

i już wiem, że będzie fajnie.

To nie musi być zły kod. Jeżeli to jest implementacja jakiegoś wzoru, to nie ma po co silić się na wymyślanie nazw zmiennych opisowych, niezgodnych z użytymi we wzorze symbolami.

LG
Chyba, że pisze się w gcc pod nano bez podświetlania zmiennych i używa się w pętlach i,j albo m,n to przy kiepskim wzroku wiele godzin może zejść na debuggowanie ;)
somekind
No ja też używam w pętlach i, j oraz k, na małym obszarze to nie jest problem.
LG
Ja się zraziłem, jak raz inkrementowałem n zamiast m, co powodowało długie debuggowanie, więc jak już to używam liter o znacznie różnej formie graficznej, np. i oraz k , nie łącze i oraz j oraz I l (też to kiedyś widziałem, ale I to była wartość w operatorze indeksacji).
somekind
No ja w ogóle l nie używam, bo wygląda jak 1. Ale problemu z rozróżnieniem i oraz j nie mam. No i nie piszę raczej zagnieżdżonych pętli.
LG
LG
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 5 lat
0

W czasach javy i monitorów 5k to nie ma znaczenia, ale jak miało się terminal na 80 lub 130 znaków to szerokość zmiennych zaczynała mieć znaczenie. Pewnie to jakaś zaszłość i obecnie bardziej tak się uczymy bo ktoś czyta stare kursy, albo wykładowca na tablicy pisze tak, albo bo jest starej daty, albo nie chce mu się na tablicy pisać długich zmiennych.

vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
2

To jest całkiem poprawne nazewnictwo.
Stosowane zresztą w oficjalnych podręcznikach do Javy od Oracle'a (patrz "OCA/OCP Java SE 7 Programmer I & II Study Guide").
Wszelkie 3-4 wyrazowe nazwy można skrócić do 3-4 znakowych skrótów pochodzących od nazw klas i są w miarę unikalne w obrębie metody.

Nazwy jedno-literowe też są OK, część z nich pochodzi z matematyki, część z fizyki:
i,j,k - zmienne iteracyjne
n,m - liczba elementów
h - wysokość
x, y, z - pozycje w układzie współrzędnych
dx, dy, dz - przyrost pozycji w układzie współrzędnych
a,b - wartości "pierwsza i druga" np. w metodach typu min/max
v - prędkość
r - promień

A skróty są nie tylko przez małe ekrany. Łatwiej operuje się nazwą zmiennej "byteArrayOutputStream" czy "baos"?

edytowany 1x, ostatnio: vpiotr
onomatobeka
"byteArrayOutputStream" czy "baos" - oczywiście, że łatwiej operuje się pierwsza. IDE odpowiednio uzupełni Ci nazwę zmiennej jak będziesz chciał ja wykorzystać.
tajny_agent
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad rok
  • Postów:1340
0

A ja się całkowicie zgodzę z autorem wątku. Bo czy nie lepiej zarówno dla piszącego jak i czytającego byłoby:

FileInputStream input = null
BufferedInputStream buffer = null;
OutputStream output = null

zamiast takich nic nie mówiących akronimów fis, bis, etc.?


"I love C++. It's the best language in the world right now for me to write the code that i need and want to write"
~ Herb Sutter
caer
skąd mam na pierwszy rzut oka widzieć czy input to FileInputStream czy BufferedInputStream?
Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Stacktrace
  • Postów:6821
3

Zacznijmy od podstaw.

variable-name.png

Nazwa zmiennej w rodzaju fis czy bis nie jest złą nazwą o ile donosi się do czegoś lokalnego. Tak samo jak używamy i jako licznika w pętli, czy c do trzymania aktualnie parsowanego znaku.

Problem leży gdzie indziej. Kod na którym się pastwimy, jest proceduralny, aż do bólu. Jeżeli podzielisz go ładnie na metody, to nagle te zmienne znikną. Jeżeli pisząc kod, zastanawiasz się nad znaczeniem zmiennej, to oznacza, że:

  • zmienna ma zbyt szeroki zasięg i zbyt krótką nazwę,
  • nazwa choć opisowa, to nie oddaje intencji.

Dzisiaj nie powinien być to problem, bo IDE dość dobrze radzą sobie z uzupełnianiem nazw. Z drugiej strony nasze mózgi nadal nie za bardzo radzą sobie z dłuższymi nazwami zapisanymi camelCasem, albo z podkreśleniami. Podsumowując, nazwy skrótowe są ok, ale jak mają bardzo krótki i oczywisty zasięg.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)