Тёмный

DOBRZY PROGRAMIŚCI PISZĄ CZYSTY KOD 

Jak nauczyć się programowania
Подписаться 79 тыс.
Просмотров 9 тыс.
50% 1

7:44 Single Responsibility - Zasada jednej odpowiedzialności
13:26 Właściwe nazewnictwo
17:01 Konkretny, rzeczowy kod + prosta logika kodu
20:18 W czystym kodzie nie ma powtórzeń (DRY - Don't Repeat Yourself)
23:05 Czysty kod to kod przetestowany
Umiejętność pisania czystego kodu to jedna z najważniejszych umiejętności w arsenale dobrego programisty. Nie jest to jednak sztuka łatwa, dlatego tak istotne jest, by uczyć się jej już od samego początku przygody z programowaniem, a potem doskonalić ją przez całą karierę.
W tym filmie przedstawiam pięć najważniejszych zasad pisania czystego kodu, dzięki którym Wasze projekty będą lepsze, a praca nad nimi łatwiejsza i bardziej efektywna.
💥 Roadmapa programisty - Czego, kiedy i dlaczego się uczyć, żeby zostać programistą: roadmapaprogramisty.pl/

Опубликовано:

 

31 июл 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 35   
@sebon11
@sebon11 4 года назад
Jak ja szanuję ten kanał :) o wielu rzeczach wiedziałem (ale o testowaniu, jako części czystego kodu, nie słyszałem :) ), ale dobrze sobie przypomnieć, a sposób tłumaczenia jest genialny :) cieszę się że ten kanał powstał i że robisz takie filmy, pozdro!
@lennyrogal
@lennyrogal 5 лет назад
Zajebisty wstęp z białą rękawiczką :D
@piotrbednarski_
@piotrbednarski_ 5 лет назад
Biała rękawiczka najlepsza :D
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 5 лет назад
Dzięki, też jestem z niej zadowolony :D Tylko trzeba pamiętać o pisaniu czystego kodu, żeby faktycznie pozostała biała :D
@andbubu4822
@andbubu4822 5 лет назад
Porównanie klas do samochodu genialne.
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 5 лет назад
Dzięki! Jednym z celów, jakie sobie założyłem to tłumaczyć programistyczne koncepty w przyjazny i przystępny sposób, także taki pozytywny odbiór bardzo mnie cieszy :)
@marcinlesniewski4571
@marcinlesniewski4571 4 года назад
Elegancko
@marcinlesniewski4571
@marcinlesniewski4571 3 года назад
10 miesięcy później wreszcie rozumiem o czym mówisz.
@laskaplplplpl3426
@laskaplplplpl3426 5 лет назад
Hahaha kocham tę rękawiczkę 😂❤️
@dreadkoji
@dreadkoji 4 года назад
a dla mnie dodatkowy + za to że lubisz Synthwave ;)
@jesiooooo
@jesiooooo 4 года назад
Świetny film, fajna wiedza. Bede polecał kolege, żeby miał z tego profity i chciał więcej filmów nagrywac :)
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 4 года назад
A dziękuję bardzo ;)
@NeoBTK
@NeoBTK 4 года назад
SOLID, również Robert C. Martin, ostatnio akurat się z tym zapoznawałem ;)
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 4 года назад
O tak, zasady SOLID również warto znać :) Nie było jeszcze o nich odcinka na kanale, ale będzie!
@dawidk.7305
@dawidk.7305 4 года назад
Co tam rękawiczka. Dawno się tak nie uśmiałem "genymdhms" :)
@kacperkujawa213
@kacperkujawa213 4 года назад
Tak się zastanawiam nad jedną rzeczą - czy kompozycja z interfejsami może w 100% zastąpić dziedziczenie? Piszę teraz projekcik do portfolio, muszę przechować klasy implementujące pewien interfejs w kolekcjach - wtedy kilka razy muszę powtórzyć implementację hashcode i equals, o getterach nie wspomnę (staram się nie używać setterów by zachować jak największy stopień immutability). Problem całkowicie znika przy użyciu klasy abstrakcyjnej. Co o tym sądzisz? Jest na to jakieś ogólne lekarstwo?
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 4 года назад
Cała idea "composition over inheritance" ma za zadanie wymusić na nas pisanie kodu o jak najmniejszym couplingu, kodu jak najbardziej modularnego, w którym wszystkie komponenty są ze sobą tak luźno powiązane, że możemy je swobodnie łączyć, wymieniać, dodawać nowe, itd. Ale oczywiście jest to obraz idealny, wzór do którego chcemy dążyć, ale w rzeczywistości nie zawsze jest to możliwe. W rzeczywistym świecie rzeczy też są mocno ze sobą związane - teoretycznie silnik samochodu to oddzielna, istniejąca w oderwaniu od całości część, ale nie oznacza to, że możemy sobie bez problemu przekładać silnik z jednego samochodu do drugiego. W wielu przypadkach dziedziczenie będzie najlepszym sposobem na rozwiązanie danego problemu i zdecydowanie należy z niego korzystać. Ważne jest oczywiście to, żeby robić to dobrze - czyli, żeby nie było na przykład sytuacji, że tworzymy sobie klasę abstrakcyjną, definiujemy w niej kilka abstrakcyjnych metod, a potem w klasie potomnej połowy metod nie implementujemy. Hashcode i equals implementujesz sam? Możesz przyjrzeć się Lombokowi: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-mdRTVElAHbs.html Ta biblioteka pozwala dodać do klasy implementacje obu metod za pomocą adnotacji @EqualsAndHashCode
@karolklemens8652
@karolklemens8652 4 года назад
Czytałem kiedyś teorię, że każda funkcja powinna zwracać tylko jedną rzecz. Nie więcej, nie mniej... Czy to prawda?
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 4 года назад
W większości języków programowania funkcje zwracają jedną rzecz - albo pojedynczą wartość albo obiekt/strukturę. Same obiekty też powinny mieć jasno sprecyzowany cel - powinny reprezentować jakiś konkretny byt. I ten konkretny byt jest tą naszą jedną rzeczą, którą zwracamy z funkcji.
@QJUP
@QJUP Год назад
1:47 tymczasem chat gpt ktory idzie wlasnie w tym kierunku, tak wiem pisze komentarz grubo po czasie
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania Год назад
Haha a mijają dopiero 4 lata od tego filmu :D Zobaczymy jak to się będzie rozwijać i czy AI stworzy nam nowego Wiedźmina za jakiś czas ; )
@xlewusx
@xlewusx 4 года назад
21:49 można też te metody w jednym bloku try łapać.
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 4 года назад
W tym konkretnym przypadku tak, ale to tylko ilustracja problemu na jednym screenshocie - w realnym projekcie będziemy mieć różne bloki try-catch w różnych częściach systemu, łapiące wyjątki różnego typu.
@xlewusx
@xlewusx 4 года назад
@@JakNauczycSieProgramowania jeśli obsługujemy je w ten sam sposób to np. w Javie jest multitype catch (jeden catch na wiele różnych typów) lub podajemy typ ogólny (np. Exception).
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 4 года назад
xlewusx ale cały czas mówisz o sytuacji jak ze screenshota, gdzie cały kod masz w jednym miejscu, a ja mówię o tym, że te try-catche masz w różnych miejscach kodu, w kilku różnych klasach :)
@VisiateAI
@VisiateAI 11 месяцев назад
Nigdy nie będzie działać? Po 4 latach AI potrafi robić nie słuchane wtedy żeczy w tym pisać kod. Dobrze że jestem nie licznym porządnym specjalistą od AI i będę jeszcze miał co do roboty.
@praktycznewskazowki6733
@praktycznewskazowki6733 2 года назад
Zbytnio nie rozumiem tej pojedynczej odpowiedzialności, powinniśmy tworzyć klasy które mają jedna max dwie metody?
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 2 года назад
To jest zawsze kwestia wyczucia i znalezienia złotego środka. Generalnie kod powinien być jak najłatwiejszy do rozszerzenia i zmiany, a to oznacza z kolei, że powinien być jak najbardziej modularny, a komponenty/klasy powinny być ze sobą jak najmniej ze sobą powiązane. Załóżmy, że mamy serwis społecznościowy, w którym użytkownik może dodać trzy typy postów: - tekst - zdjęcie - film Pierwsza myśl może być taka, żeby stworzyć klasę odpowiedzialną za dodawanie postów i umieścić w niej trzy metody: - postText - postPhoto - postVideo I niby spoko, bo przecież wszystko dotyczy jednej funkcjonalności (dodawanie posta), ale jednak, gdy się zastanowimy, są to trzy różne funkcjonalności, więc powinniśmy stworzyć trzy osobne klasy, każda odpowiedzialna za dodawanie danego typu posta. Dzięki temu, jeżeli coś się zmieni w logikę dodawania zdjęć, nie będziemy musieli modyfikować klas odpowiedzialnych za dodawanie postów tekstowych oraz filmów. Taki kod jest łatwiejszy do utrzymania i łatwiej się z nim pracuje. Bo gdy jeszcze pracujemy nad nim sami to pewnych rzeczy możemy nie dostrzegać, ale co jeżeli pracujemy nad takim serwisem wraz z innymi programistami, będąc członkiem zespołu? Może przyjdzie taki dzień, że jedna osoba będzie modyfikować posty tekstowe, inna zdjęcia a jeszcze inna filmy. I gdy wszystkie te funkcjonalności będą w jednej klasie, pojawi się problem, trzy osoby będą nawzajem sobie wchodziły w drogę. A mając te trzy funkcjonalności w trzech osobnych klasach, sprawa jest prosta, każdy pracuje nad swoim kawałkiem kodu, w odrębnej klasie i problemu nie ma :) Oczywiście nic nie stoi na przeszkodzie, żeby stworzyć również klasę, która te wszystkie funkcjonalności zbierze w całość i będzie po prostu delegować wywołanie tych metod do tych trzech pojedynczych klas. Czyli podsumowując to wszystko, możemy np. stworzyć klasę PostCreator, gdzie będziemy mieć metody: - postText - postPhoto - postVideo ale logika tych metod będzie zawarta w klasach TextPostCreator, PhotoPostCreator, VideoPostCreator i w PostCreator będziemy mieć tylko coś takiego, tylko wywołanie metod znajdujących się w poszczególnych klasach (oczywiście do każdej z tych metod przekazalibyśmy jeszcze potrzebne argumenty): void postText() { textPostCreator.post() } void postPhoto() { photoPostCreator.post() } void postVideo() { videoPostCreator.post() }
@praktycznewskazowki6733
@praktycznewskazowki6733 2 года назад
@@JakNauczycSieProgramowania dzięki za doprecyzowanie 🙂
@James_Cook_Explorer
@James_Cook_Explorer 4 года назад
reużywać => powtarzać dbajmy o czystość języków, nie tylko programowania...
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 4 года назад
No właśnie nie do końca, w przypadku reużywalności chodzi właśnie o to, żeby nie powtarzać kodu :) Nie ma niestety dobrych polskich odpowiedników dla słów "reuse" i "reusable", też nie przepadam za takimi koszmarkami jak "reużywalny", ale trzeba sobie jakoś radzić ; )
@penttek
@penttek 3 года назад
@@JakNauczycSieProgramowania Może kod wielokrotnego użycia, albo kod którego możemy użyć w wielu miejscach
@nevergiveupboy7692
@nevergiveupboy7692 3 года назад
@@JakNauczycSieProgramowania Mamy takie słowa które dobrze oddają reuse np. zużywać (tak jak zużywa się buty codziennie ich używając) lub spożytkować (wykorzystać coś praktycznie i efektywnie).
@JakNauczycSieProgramowania
@JakNauczycSieProgramowania 3 года назад
​@@nevergiveupboy7692 Te słowa mają zupełnie inne znaczenie. "Reuse" nie jest ani zużywaniem ani wykorzystaniem czegoś. Możemy użyć słowa "reuse", gdy mówimy na przykład o wielokrotnym wykorzystaniu torby na zakupy ("It's smart to reuse grocery bags"), możemy też użyć słowa "reuse", gdy mówimy o ponownym wykorzystaniu plastiku ("there are many ways to reuse plastic bottles"), ale nie możemy użyć słowa "reuse", gdy mówimy o codziennym używaniu butów (codzienne użytkowanie to po prostu "use"). Jeżeli chodzi o język polski, tłumacz Google podaje tylko jedno tłumaczenie słowa "reuse" i jest to "ponowne użycie". W kontekście programowania "reuse" ma bardzo konkretne znaczenie - chodzi o to, że tworzymy coś raz (komponent, metodę), a następnie używamy tej raz utworzonej rzeczy w wielu różnych miejscach. Można faktycznie mówić "komponenty wielokrotnego użycia" zamiast "reusable components", ale wciąż uważam, że gdyby w języku polskim istniało tłumaczenie "reusable" będące pojedynczym słowem, byłoby to dużym ułatwieniem :)
@nevergiveupboy7692
@nevergiveupboy7692 3 года назад
@@JakNauczycSieProgramowania "Reusable components" brzmi mi trochę na "komponenty z odzysku". W końcu ponowne wykorzystanie materiału typu plastik lub papier to jest właśnie "odzysk", możliwe ze tak można przełożyć reuse, reużywać na odzyskiwać. Tak sobie tylko kombinuje 🙂
Далее
Jak nauczyć się programowania i zostać programistą?
1:22:13
CZYM JEST PROGRAMOWANIE OBIEKTOWE?
17:24
Просмотров 40 тыс.
7  WAŻNYCH rzeczy w 7 LAT jako Programista
10:32
Просмотров 1,9 тыс.
Jak tworzyć REST API? 10 najważniejszych zasad.
12:14
Jak realizować cele i zostać programistą?
7:59
Просмотров 12 тыс.
Git merge vs. rebase (i jak robić to dobrze)
14:26
Просмотров 38 тыс.
Jak nauczyć się pisać profesjonalny kod?
25:27
Просмотров 1,3 тыс.