Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

586 Stron V  « < 567 568 569 570 571 > »   
Reply to this topicStart new topic
> Jeden Wielki OffTopick, jeśli masz pisać na temat, nie wchodź!
Mayteck
post
Post #11361





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 27.04.2016

Ostrzeżenie: (0%)
-----


Dziękuję.
Go to the top of the page
+Quote Post
KsaR
post
Post #11362





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

Ostrzeżenie: (0%)
-----


http://php7-tutorial.com

Ciekawa strona, można się przetestować "na żywo" czy umiemy przepisać skrypt pod php7.
Go to the top of the page
+Quote Post
WebCM
post
Post #11363





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

Ostrzeżenie: (0%)
-----


Składał ktoś PIT-37 po terminie? Teoretycznie grozi za to mandat karny, ale czy go wystawiają za niewielkie spóźnienie?

Ten post edytował WebCM 29.04.2016, 21:21:45
Go to the top of the page
+Quote Post
Pyton_000
post
Post #11364





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Zanieś ręcznie do US i dołącz do tego "czynny żal" i powinno być po kłopocie.

PS. ZUS bardziej jest bezwzględny (IMG:style_emoticons/default/smile.gif) US przymyka oko na takie drobne rzeczy.
Go to the top of the page
+Quote Post
Fred1485
post
Post #11365





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

Ostrzeżenie: (0%)
-----


Co sądzicie Panowie o takim stylu kodowania, spotkałem się z nim podczas generowania różnych "rzeczy" z poziomu konsoli symfony, gdzie np wygenerowany formularz taką konwencję przyjmuje.

  1.  
  2. $user
  3. ->setName('name')
  4. ->setSurname('surname')
  5. ->setAddress('address')
  6. ->setAccount('...')
  7. ;


Pytam z czystej ciekawości (IMG:style_emoticons/default/wink.gif)

Ten post edytował Fred1485 2.05.2016, 19:23:40
Go to the top of the page
+Quote Post
kapslokk
post
Post #11366





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Ja tam lubię method chaining ;d Wkurza mnie pisanie wszystkiego po kilka razy - tak mam raz obiekt do którego chcę się odwołać, a później tylko piszę po kolei co chce zrobić (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Pyton_000
post
Post #11367





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Czytelnie...

  1. $user->setName('name')
  2. ->setSurname('surname')
  3. ->setAddress('address')
  4. ->setAccount('...');
Go to the top of the page
+Quote Post
Fred1485
post
Post #11368





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

Ostrzeżenie: (0%)
-----


@up Też taki sposób zapisu bardziej mi odpowiada. Ten średnik w nowej linii to głupota (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
kapslokk
post
Post #11369





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat
Ten średnik w nowej linii to głupota

To też kwestia gustu (IMG:style_emoticons/default/smile.gif) Imo czytelniej jest jeśli średnik jest w nowej linii bo wtedy mam oddzielony taki jakby blok jak w przypadku klamerek. (IMG:style_emoticons/default/smile.gif) Poza tym łatwiej mi później dodać nową linijkę na końcu. Tak samo w przypadku tablic, zawsze po ostatnim elemencie dostawiam przecinek (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
KsaR
post
Post #11370





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

Ostrzeżenie: (0%)
-----


Też jestem za fluent interface ("method chaining").
Praktycznie używam gdzie się da jak tylko biblioteki oferują, lub sam coś robię.
Mniej do pisania przez co też czytelniej wiele dla mózgu (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
mrc
post
Post #11371





Grupa: Zarejestrowani
Postów: 160
Pomógł: 27
Dołączył: 22.09.2008
Skąd: Tarnów

Ostrzeżenie: (0%)
-----


Nie lubię fluent interface. Nie przestrzega prawa Demeter, nigdy nie wiadomo, jaki typ obiektu jest po strzałkach ani jaki rezultat zwraca funkcja. Przekazując sobie każdą wartość do zmiennej nadaje się jej nazwę, przez co wiadomo, czym ten rezultat jest.

Zaraz posypie się hejt wszystkich lubiących fluent.

Kolejnym ważnym aspektem przeciw fluent jest to, że łamie się SRP, ponieważ kilkakrotnie zmienia się kontekst a co za tym idzie, robi się wiele rzeczy na raz. Nie mówiąc już o testowaniu, które jest coraz trudniejsze wraz ze wzrostem metod, które uruchamiamy jedna po drugiej (niezależnie od tego, czy używamy fluent, czy nazywamy sobie rezultaty funkcji).

Ten post edytował mrc 2.05.2016, 19:59:51
Go to the top of the page
+Quote Post
KsaR
post
Post #11372





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

Ostrzeżenie: (0%)
-----


Cytat(mrc @ 2.05.2016, 20:58:51 ) *
(...)nigdy nie wiadomo, jaki typ obiektu jest po strzałkach ani jaki rezultat zwraca funkcja. Przekazując sobie każdą wartość do zmiennej nadaje się jej nazwę, przez co wiadomo, czym ten rezultat jest.
(...)

Mógłbyś rozwinąć pierwsze zdanie? (To że nie wiadomo jaki typ obiektu).
Co do rezultatu. Fluent` zwarca obiekt, domyslnie by pewnie nic nie zwracał (gdyby się go nie zastosowało), bo skoro metoda mogła by zwrócić coś innego to większość osób by pewnie tak zrobiło..

Cytat
robi się wiele rzeczy na raz

Do tego wiele osób to używa według mnie.

### to nie hejt tylko pytanie ###
Go to the top of the page
+Quote Post
mrc
post
Post #11373





Grupa: Zarejestrowani
Postów: 160
Pomógł: 27
Dołączył: 22.09.2008
Skąd: Tarnów

Ostrzeżenie: (0%)
-----


@Ksar, programując w C++ masz coś takiego:

Kod
SomeObject o;
SomeOtherObject.doSomeStuff().doSomeOtherStuff().doNextStuff();


Gubisz tutaj typ, nie masz informacji o tym, co zwraca doSomeStuff oraz doSomeOtherStuff().
Możesz to zamienić na:

Kod
SomeObject o;
SomeStuff some = o.doSomeStuff();
SomeStuff other = some.doSomeOtherStuff();
NextStuff next = other.doNextStuff();


W pierwszym nie wiesz, co zwracają funkcje, w drugim wiesz. W pierwszym nie przyjdzie Ci na myśl to, że dwie pierwsze funkcje zwracają ten sam typ, w drugim masz jasno wszystko.
Ofc. przykład podałem w C++, ponieważ łatwiej jest zauważyć różnicę. Podobnie to działa w JS, PHP, Java czy innych C#.

Zaraz mi powiesz, że czytelność jest dla Ciebie najważniejsza. I przez takie gadanie powstają bagniste spaghetti nie trzymające się żadnych zasad.

Co do robienia wielu rzeczy na raz - z tego co kojarzę jesteś młodym programistą, więc zapamiętaj raz na zawsze: każda funkcja którą napiszesz ma robić tylko jedną rzecz. Jeżeli używasz gdzieś fluent, to jest spore ryzyko tego, że funkcja używająca go nie robi jednej rzeczy na raz.
Go to the top of the page
+Quote Post
KsaR
post
Post #11374





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

Ostrzeżenie: (0%)
-----


Cytat(mrc @ 2.05.2016, 21:20:54 ) *
(...)Zaraz mi powiesz, że czytelność jest dla Ciebie najważniejsza. I przez takie gadanie powstają bagniste spaghetti nie trzymające się żadnych zasad.

(...) każda funkcja którą napiszesz ma robić tylko jedną rzecz. Jeżeli używasz gdzieś fluent, to jest spore ryzyko tego, że funkcja używająca go nie robi jednej rzeczy na raz.

Ale debila to ze mnie nie rób, bo pisałem tak:
Cytat
bo skoro metoda mogła by zwrócić coś innego to większość osób by pewnie tak zrobiło..

^ ja się w to wliczam.
Co do funkcji(metody) - robię tak, zaskocze tez cb ze fluent dodaje gdy juz wszystko zrobione i przetestowane. A nie jak ci się zdaje na początku lub w trakcie.
Go to the top of the page
+Quote Post
vokiel
post
Post #11375





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Różnica w czytelności nie jest tak wielka jakby mogło się wydawać na pierwszy rzut oka:
  1. $user = $sth->getUser();
  2. $user->setName('name')
  3. ->setSurname('surname')
  4. ->setAddress('address')
  5. ->setAccount('...');


  1. $user = $sth->getUser();
  2. $user->setName('name');
  3. $user->setSurname('surname');
  4. $user->setAddress('address');
  5. $user->setAccount('...');


Cytat(mrc @ 2.05.2016, 21:20:54 ) *
Co do robienia wielu rzeczy na raz - z tego co kojarzę jesteś młodym programistą, więc zapamiętaj raz na zawsze: każda funkcja którą napiszesz ma robić tylko jedną rzecz. Jeżeli używasz gdzieś fluent, to jest spore ryzyko tego, że funkcja używająca go nie robi jednej rzeczy na raz.


Zawsze gdzieś będzie fragment kodu, który zbierze wywołanie kilku rzeczy na raz (IMG:style_emoticons/default/tiredsmiley.gif)

Natomiast przykład powyżej pokazują, że fluent przy niewielkiej (IMHO) poprawie czytelności zmienia ilość zadań wykonywanych przez settery. W drugim przypadku metody te tylko zapisują dane, zmieniając aktualny stan obiektu, natomiast w pierwszym wykonują 2 działania: zapis i odczyt/zwrot wartości.
Go to the top of the page
+Quote Post
com
post
Post #11376





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


Skoro już mowa o fluent to do poczytania http://ocramius.github.io/blog/fluent-interfaces-are-evil/ (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
Comandeer
post
Post #11377





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Też mnie zawsze fluent API trochę mierzi, ale z drugiej strony: czy takie jQuery byłoby aż tak popularne, gdyby tego nie miało? To jest de facto znak rozpoznawczy tej biblioteki. W obecnej chwili, jak pisze się tego typu liba w JS, to po prostu nie da się nie zaimplementować fluent API. Ba, nawet stworzono liba, żeby takie fluent API wprowadzić bezpośrednio do DOM → http://lea.verou.me/chainvas/

Nie mówię, że to jest złe czy dobre – bardziej się zastanawiam skąd aż taka popularność tego w pewnym segmencie JS devu. I nie, odpowiedź "bo to JS" nie jest poprawna (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
com
post
Post #11378





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


tak tylko w 90% w JQ wykonujesz coś na obiekcie i nie interesuję Cie co ta funkcja zwraca, bo liczy się efekt, a nie sam wynik.
Go to the top of the page
+Quote Post
Comandeer
post
Post #11379





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Ok… Ale czym się zatem różni:
Kod
$user = new User()
    ->setName( 'Name' )
    ->setSurname( 'Surname' );

od:
Kod
const elem = $( 'elem' )
    .html( 'html' )
    .height( 100 );

? (IMG:style_emoticons/default/wink.gif)

Zasada jest dokładnie taka sama: liczy się dla nas efekt, nie wynik. Więc skoro w PHP jest to przez wielu uważane za anti-pattern, to dlaczego w JS – już nie?
Go to the top of the page
+Quote Post
com
post
Post #11380





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


No w tym przypadku nie ma różnicy, ale w php częściej to wynik ma znaczenie, bo z tym $user coś się potem robi, w JQ też czasem, ale w wielu przypadkach już same wywołanie tego na jakimś elemencie daje nam oczekiwany rezultat. A czy nie jest uznawane za anti-pattern to bym polemizował, bardzie to kwestia tego iż się przyjęło, w takich bibliotekach bo tam modyfikujesz pewien stan obiektu DOM. A druga sprawa, że ten język jest silnie prototypowy i tak został zbudowany. ES2015 jest zbyt młody, żeby mówić o tym co w innych językach wypracowane zostało już przez lata.

A nawet w twoim przykładzie, setter sugeruje, że ustawiasz jakaś właściwość, ale nie mówi nic o fakcie iż zostanie zwrócony obiekt.
To by musiało wyglądać wtedy tak:
  1. $user = new User()
  2. ->setNameAndReturnUser( 'Name' )
  3. ->setSurnameAndReturnUser( 'Surname' )
Go to the top of the page
+Quote Post

586 Stron V  « < 567 568 569 570 571 > » 
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.06.2026 - 02:16