Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Standardy kodowania [scanner]
Forum PHP.pl > Wortal > Artykuły
Stron: 1, 2
hawk
Hmm, przyznaję się bez bicia że to co preferuje cagrET to jakby żywcem wyjęte z mojego stylu biggrin.gif . Ja robię dokładnie tak samo. Tutaj jednak zaczynamy kwestię enterów i spacjowania. Polecam http://java.sun.com/docs/codeconv/. Sun pod tym względem jest bardzo dokładny i dobrze mi się tak pisze.

Więc, co przemyśleniu, dochodzę do wniosku że o przed nazwą obiektu można sobie podarować i pisać po prostu z małej. Przedrostki do innych typów zmiennych jednak mi się podobają, chociaż do tej pory nigdy nie używałem.
treewood
wassago napisal:
"thanks = thx = t (!?)"

no nie ... walnales przyklad po prostu idealny ... hehehehe

hawk napisal:
"Więc, co przemyśleniu, dochodzę do wniosku że o przed nazwą obiektu można sobie podarować i pisać po prostu z małej. Przedrostki do innych typów zmiennych jednak mi się podobają, chociaż do tej pory nigdy nie używałem."

No racja ... kazdy pisze jak chce ... lepsze to niz pisanie $objCosTam. juz blizszy bylbym $CosTam. Jednak ja nie lubie wyjatkow. Skoro wszystkie zmienne traktuje wg schematu to nie robie wyjatku, ze TYLKO objekty sa inaczej nazywane. Ale to juz dla mnie drobnostka z porownaniem z tym $objCosTam.
kodereq
Chciałem zapytać jak najłatwiej osiągnąć te wcześniej wspomniane "4 spacje". No bo chyba nie przez 4 uderzenia klawisza spacji ? Da się to jakoś podbindować pod Tab ?
Crozin
To zależy od edytora w jakim pracujesz. Większość w preferencjach ma coś takiego jak:
"Używaj prawdziwej tabulacji"
I jest też możliwość określenia długości na jaką ma być wyswietlany tab - i w zależności od tego czy zaznaczysz to pole, albo w miejsce Taba wrzucane są X spacje, albo wcięcie robione tabem wygląda na tak długie


btw: Osobiście odrazam używania spacji do robienia wcięć w kodzie - co najwyżej do wyrównywania jeżeli ktoś chce.
kwiateusz
a czemu odradzasz? o ile wiem to spacje wszedzie wyglądaja tak samo a tab co edytor to inaczej... no i np w yaml'u tylko spacje moga sluzyc za wciecia
Crozin
Dlatego, że dla mnie akurat idealną długością wcięcia jest odległość czterech spacji. Dla znajomego jest to odległość dwóch.
Innymi słowy użycie tabulacji daje możliwość nieinwazyjnego dostosowania wyglądu kodu do własnych preferencji.
starach
Pozwolę sobie odgrzać tego zielonkawego już kotleta. winksmiley.jpg

Crozin w złote ramki twoje słowa.

- 5 Lat jak na standardy kodowania to jest już trochę czasu. Może można by było zaktualizować ten artykuł. Chociażby ten 3literowy prefix udający notację węgierską to mnie trochę zdziwił. blink.gif
Tomplus

Wg. mnie w tym artykule powinno być zaznaczone że jeżeli jeżeli TABulator jest określeniem kilku spacji (np.4,5) to należy z niego skorzystać. A jeżeli tworzy taką przestrzeń ( ), w której kursor przeskakuje, to powinno się zakazać.

Dobre edytory textowe posiadają tą funkcje że z automatu zamieniają TAB na spacje, tylko kwestia jest... na ile tych spacji.


Mnie nurtuje takie pytanie:
Dlaczego to ma być lepsze od
  1. if ( $foo == true )
  2. {
  3. foo();
  4. }


tego

  1. if ( $foo == true ) foo();


Mówię tutaj dobitnie o takich krótkich funkcjach warunkowych. Ja uważam że coś takiego jest prawidłowe, szczególnie jeżeli klamry i nawiasy mienia sie w oczach. Więc powiedzcie, dlaczego to 1 ma być takie lepszego od tego mojego przykładu, nie zalecanego w artykule ?
erix
  1. czytelność jest większa (sam kolor nie wystarczy, nie bez powodu wymyślono marginesy i puste miejsca)
  2. szybkość rozbudowy bloku (wystarczy wstawić nową linijkę i klepać)
  3. prawidłowe przyzwyczajenia - większość projektów wymaga stosowania klamerek w swoich standardach (z tego, co pamiętam, to nawet projekty Zenda)
Tomplus
No to powinien być jeszcze jeden taki podpunkt.

Aby grupa programistów starała się aby pisząc wspólnie jakiś produkt, korzystać z tych samych standardów.

ja mam bolączkę z swoim kompanem...
bo ma świetne pomysły przy pisaniu skryptów, ale ma zupełnie odmienny styl... ignoruje odstępy i potem ja musze to wszystko poprawiać, aby kod był przejrzysty i usuwać jakieś stare szkoły np.

  1.  
  2. echo ("mój text");
  3. //albo
  4. $foo = ("jakis text");
  5. //czy
  6. echo "<font color=\"white\">Mój text</font>";


ale teraz mogę mu pokazać taki artykuł smile.gif
niech się nauczy jak pisać NOWOCZEŚNIE i prawidłowo tongue.gif
lars_91
Trochę od siebie.
1. Wcięcia - jak dla mnie wcinanie kodu tuż po <?php jest trochę bez sensu, toż to tylko jedna linijka, kod nie stanie się bardziej nieczytelny, a przynajmniej szerokość kodu się zmniejszy, nie będzie zawijany.
2. Nawiasy klamrowe - Wg. mnie czytelniejsze jest stosowanie:
  1. <?php
  2. if($expression) {
  3. echo 'True;
  4. }
  5. ?>

od:
  1. <?php
  2. if($expression)
  3. {
  4. echo 'True;
  5. }
  6. ?>

Mamy poza tym krótszy kod.
erix
Cytat
2. Nawiasy klamrowe - Wg. mnie czytelniejsze jest stosowanie:

Jeśli chodzi o sposób zapisywania nawiasów, to istnieją dwie szkoły - a wyznawców praktycznie 50/50. ;]
thek
Osobiście uważam, że standardy są od tego, by się do nich stosować. Sam "wychowywałem się" na C++ i na studiach wiele z nich mi wtłoczono. Czy to tyczących składni, czy też pisania dokumentacji projektowej itp. Wiele z nich po czasie stało się podświadomych i trudniej mi się połapać w "radosnej twórczości". Co do spacji i tabulatorów, to tak naprawdę wychodzi ten drobiazg przy komentowaniu kodu zazwyczaj, bo tam głównie dba się o to by pewne informacje były w określonym miejscu i tam tabulacja zawodzi w głównej mierze.
Spacje pomiędzy nawiasami przy liście parametrów funkcji to już standard dla mnie bo czytanie jednolitych bloków w momencie gdy do funkcji jako parametr przesyłam wartości zwracane przez inną kilkukrotnie czasem zagłębioną (wiem... tracę przy tym na wydajności, ale czasem już tak jest) to potworki w stylu
  1. funkcja(funkcja2(argument2_1,funkcja3()),parametr2,funkcja3())

są mniej czytelne niż
  1. funkcja( funkcja2( argument2_1, funkcja3() ), parametr2, funkcja3() )

Nawiasy klamrowe po funkcji przejąłem wrzucać zaraz po liście argumentów, bez przechodzenia do nowej linii, co dla mnie wygodniejsze zresztą, bo późniejsze zagłębianie sprawia, że taki kod jest nieco czytelniejszy, gdyż widać więcej kodu na tym samym poziomie zagnieżdżenia.
  1. if( warunek ) {
  2. if( warunek ) {
  3. instrukcje;
  4. } else {
  5. instrukcje;
  6. }
  7. } elseif {
  8. instrukcje;
  9. } else {
  10. instrukcje;
  11. }

  1. if( warunek )
  2. {
  3. if( warunek )
  4. {
  5. instrukcje;
  6. }
  7. else
  8. {
  9. instrukcje;
  10. }
  11. }
  12. elseif
  13. {
  14. instrukcje;
  15. }
  16. else
  17. {
  18. instrukcje;
  19. }
A teraz wyobrazić sobie trzeba, że tych instrukcji warunkowych, pętli itp., jest w kodzie znacznie więcej. Łatwiej ogarnąć całość przy pierwszej szkole zapisu, gdyż jest on zwięźlejszy. Ten kto stosuje skrótowe zapisy instrukcji warunkowych rozumie
  1. echo ( warunek) ? instrukcja : instrukcja;

, ale gdy ktoś zobaczy coś takiego pierwszy raz zapewne nie przyjdzie mu do głowy, ze jest to odpowiednik znanego mu
  1. if( warunek) {
  2. echo instrukcja;
  3. } else {
  4. echo instrukcja;
  5. }

Zresztą sam jestem zwolennikiem stosowania skrótów tam gdzie to możliwe i nieraz stosuję formę
  1. if( warunek )
  2. echo instrukcja;
  3. else
  4. echo instrukcja;

a gdy nie ma else, po prostu
  1. if( warunek ) echo instrukcja;

które to formy są dopuszczalne i w przypadku jednej instrukcji skracają kod, bez utraty jego czytelności. W końcu po coś te formy skrótowe zostały wymyślone. Albo by zmniejszyć kod w określonych przypadkach, albo dla zachowania zgodności składniowej z innymi językami.

Z C++ wyniosłem też pisanie obiektów z małej oraz klas z dużej. Dopiero PHP wniósł dodatki związane z opisem typu w zmiennej. Jako że akurat pod tym względem C++ wymusza jawne podawanie tego podczas tworzenia kodu, a niemal każda konwersja musi być jawna, nie musiałem tego wcześniej stosować. Do tej pory mam odruchy w PHP by robić rzutowania, nawet dla typów wbudowanych winksmiley.jpg Inna sprawa, że PHP mi na to także pozwala. Dlatego, mimo różnic w pewnych rzeczach, dobrze mi się pracuje z wersją 5.

Jak dla mnie pominięto w artykule choćby:
a) stosowanie spacji podczas wyrażeń arytmetycznych. Wiele osób całkowicie to ignoruje, co prowadzi do jego zlewania się w jeden wielki ciąg, który fatalnie się czyta,
cool.gif stosowanie podkreślenia na początku zmiennej by oznaczyć ją jako tymczasową (w obrębie funkcji wewnętrznej, pętli czy tego typu sytuacjach), co pozwala na szybsze połapanie się w tym, które są ważne. Wiem, że kłóci się to trochę z $_POST, $_GET i innymi ale te akurat zawsze są z dużych i znane każdemu więc się nie pomyli nikt raczej winksmiley.jpg
c) nie stosowanie podwójnego podkreślenia, bo te w wielu językach są zarezerwowane dla słów specjalnyc, co może spowodować pomyłki przy odbiorze kodu,
d) jednolitość pisowni zmiennych bool, bo stosuje się warianty: TRUE, true, True.

Oczywiście można by dodać jeszcze kilka innych winksmiley.jpg
albrzykowski
Witam,

Tutaj też jest trochę o standardach kodowania
http://97dd3f4dc892082dd4198bc1d2d576a8.blogspot.com/

Z jedną rzeczą w artykule natomiast nie bardzo się zgadzam a mianowicie odnośnie nazewnictwa plików. Z mojej strony dwa ale:

1: Jeśli chodzi o nazywanie plików małymi literami:
- Klasy PEAR (pliki) nazywane są dużymi literami;
- Zend FM stosuje również nazewnictwo klas dużymi literami

Wydaje mi się więc, żę nazwanie plików z kodem klas z dużej litery jest dobrym rozwiązaniem (nie jest złym)

2: "Nazwy plików piszemy małymi literami, zaznaczając typ pliku:

Tu też się przyczepię. Wydaje mi się, że jeśli rozplanujemy aplikację trzymając konkretne jej części w wydzielonych dla nich folderach, dopisywanie do nazwy pliku jej typu nie ma większego sensu.

Jeśli mamy np folder classes lub libs to nie widzę potrzeby dodawania w nazwie "class" lub "function".

Poza tym ciekawy artykuł, wiem, że dośc stary niemniej dobrze, że ktoś napisałem a tym.

Pozdrawiam.
starach
Wydaje mi się że to już nie ma co się czepiać, tylko trzeba ten temat zarchiwizować lub dodać mu jakiś tag typu [nieaktualne].
emp
Standard kodowania jest jeden. Netbens. Prawy przycisk myszy i fromat. Wszystko piszemy z małej litery i nadajemy sensowne nazwy. To samo tyczy się katalogów i nazw plików czy komentarzy. Reszta to prehistoria i utrudnianie sobie życia na siłę.
erix
A przeczytałeś ten wątek? Ja akurat NetBeans/Eclipse/czegokolwiek w javie nie znoszę i co?
Volume
Ja nie uwazam zeby watek archiwizowac wg mnie problem jest dosc istotny a nowosci (i ich sensowna argumentacja moze byc ciekawa).
Co do tego co zostalo opisane przez scannera w wiekszosci przypadkow po pewnym stazu mozna samemu do tego dojsc. Ja w 90% jakby intuicyjnie (czyli tak jak dla mnie wydawalo sie najczytelniej) stosowalem wlasnie takie rozmieszczenia kodu jak opisane w artykule.

Choc to co mnie najbardziej gubi w cudzych kodach to zapis w postaci:

  1. if(...) {
  2. ...
  3. }


zdecydowanie wole:

  1. if(...)
  2. {
  3. ...
  4. }


czyli odwrotnosc do tego co podal thek
pitbull82
Cytat(Volume @ 9.05.2010, 19:36:26 ) *
zdecydowanie wole:


Ja do niedawna też, ale widzę że jak się używa bardziej zaawansowanych edytorów które zwijają kod, to traci się po zwinięciu linijkę, bo zostaje { (phped), więc postanowiłem zmienić wieloletnie przyzwyczajenia.
kulczycki
Cytat
Standard kodowania jest jeden. Netbens. Prawy przycisk myszy i fromat. Wszystko piszemy z małej litery i nadajemy sensowne nazwy. To samo tyczy się katalogów i nazw plików czy komentarzy. Reszta to prehistoria i utrudnianie sobie życia na siłę.


Wszystko piszemy z małej litery ?. Logicznie rzecz biorąc nie ma to większego sensu. Przykład
islogin() czy IsLogin() : wybieraj winksmiley.jpg

a teraz przykład długiej nazwy funkcji
handlequestgiverstatusqueryopcode( WorldPacket & recv_data )
czy
HandleQuestgiverStatusQueryOpcode( WorldPacket & recv_data )

chyba że chodzi Ci o nazwy zmiennych - to się zgodzę ale nie w każdym przypadku. Co do plików też się nie zgodzę ;P

co do klamr, ja znów mam nawyk z c++ i kilku obszernych projektów i wole stosować
  1. if( warunek ){
  2.  
  3. }


spacje po i przed nawiasami, nie wiem czemu ale jakoś tak wygodniej mi. Klamry za warunkiem.

Tak naprawdę standardy standardami ale trudno nauczyć człowieka czegoś innego od tego jak mu dobrze. Każdy pisze tak jak lubi, jedynie to w projekcie na większa skale trzeba się czegoś trzymać.
phpion
Cytat(kulczycki @ 30.12.2010, 00:27:03 ) *
handlequestgiverstatusqueryopcode( WorldPacket & recv_data )
czy
HandleQuestgiverStatusQueryOpcode( WorldPacket & recv_data )

Dlaczego pakujesz camelCase jako nazwę funkcji do języka, który korzysta z under_score?
handle_quest_giver_status_query_opcode( WorldPacket & recv_data )
Takie cuda jak podane przez Ciebie pasują do JavaScript (z tym, że pierwsza litera to mała litera), a nie do PHP.
kulczycki
Phpion to nie z javyscript a z c++. I nie wiem co złego jest w łączeniu nazw przez użycie dużych liter zamiast _. Mi tak jakoś jest o wiele bardziej wygodniej, i jest to ładniejsze dla oka. Szczerze to masz też racje bo nie brałem pod uwagi under_score smile.gif
phpion
Nie mówię skąd się wywodzi CamelCase - odniesienie do JavaScript miało na celu to, że w tym języku jest stosowany CamelCase, natomiast w PHP under_score. Według mnie decydując się na kodowanie w danym języku wypadałoby nie mieszać konwencji i trzymać się tej obowiązującej. Dla porównania:
PHP: http://php.net/quickref.php
JS: http://www.tutorialspoint.com/javascript/j...n_functions.htm
kulczycki
A masz na myśli nazwy zwykłych funkcji czy też metod w obiektach ?
Crozin
@phpion: Nie podawaj tutaj PHP jako przykładu języka, w którym przyjęła się notacja under_score (ona się tak na serio nazywa?), bo ona się nie przyjęła. Albo inaczej - już od dawna nie jest wiodącą. Niestety bardzo często powtarzane "PHP ma burdel w API" odnosi się również do braku jakichkolwiek konwencji dot. nazewnictwa.
darko
Odkurzam. W zalinkowanym artykule w temacie lista znaczników phpDoc jest już niekompletna.
Dejmien_85
Cytat(Crozin @ 4.01.2011, 13:47:29 ) *
@phpion: Nie podawaj tutaj PHP jako przykładu języka, w którym przyjęła się notacja under_score (ona się tak na serio nazywa?), bo ona się nie przyjęła. Albo inaczej - już od dawna nie jest wiodącą. Niestety bardzo często powtarzane "PHP ma burdel w API" odnosi się również do braku jakichkolwiek konwencji dot. nazewnictwa.


Odgrzeję starego i zgniłego koteleta, ale wyłącznie w celach edykacyjnych.

Nie spotkałem się nigdy z terminem "under_score", to się nazywa "snake_case" - ogólnie mamy 3 terminy:
- snake_case,
- camelCase,
- StudlyCaps.

Co do standardów kodwania - obecnie w PHP chyba najlepszy wybór to PSR-X i do tego książki typu "Clean Code". wink.gif
irekk
StudlyCaps znam jako PascalCase. snake_case czesciej zwane jest LowerCase albo underscores. Natomiast korzystam w swoich projektach z notacji węgierskiej w przypadku zmiennych i PascalCase w przypadku funkcji, klas i przestrzeni.
Dejmien_85
Cytat(irekk @ 2.11.2014, 18:07:53 ) *
StudlyCaps znam jako PascalCase. snake_case czesciej zwane jest LowerCase albo underscores. Natomiast korzystam w swoich projektach z notacji węgierskiej w przypadku zmiennych i PascalCase w przypadku funkcji, klas i przestrzeni.


Hmm, ogólnie to niedawno w jednej z książek (chyba Javy) spotkałem się z określeniami: lowerCamelCase i UpperCamelCase.

Później zajrzałem na wiki i zobaczyłem:

- BumpyCaps/BumpyCase
- camelBack
- CamelCaps
- CapitalizedWords/CapWords
- compoundNames
- Embedded Caps/Embedded Capitals
- HumpBack
- InterCaps/Internal Capitalization
- mixedCase
- nerdCaps/headlessCamelCase
- PascalCase
- SmalltalkCase
- WikiWord/WikiCase
- wimpyCaps

No i pomyślałem sobie, że... tak mało wiemy. ; F

Dobra, nie ma co rozgrzebywać tego tematu, jak widać co język to nowe pojęcia - a ludzie uwielbiają finezję. ; )
com
Wiem że troche odgrzebuje, ale wisi od lat jako ostatni wiec pewnie od czasu do czasu ktoś tu zajrzy mimochodem, dlatego dla potomnych dziś jedyny standard to będzie ten https://www.php-fig.org/per/coding-style/
Salvation
PSR-12. Każdy inny standard użyty w kodzie, to "widzi mi się" programisty / firmy i nie powinien istnieć tongue.gif
com
@Salvation tak do tej pory było to PSR-12 ale obecnie najnowszy i już ostatni standard który będzie nadążał za zmianami w core, po prostu się zmieniał to PER smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.