Świetna dyskusja dlaczego OOP ssie.

Świetna dyskusja dlaczego OOP ssie.
4
edytowany 1x, ostatnio: somekind
0
cerrato napisał(a):

OOP to jedno z podejść/technologii. I nie ma jednoznacznej odpowiedzi, czy jest wporzo, czy raczej kolejnym wcieleniem szatana.
Przede wszystkim - zależy od projektu, nad którym się w danej chwili pracuje.

To trochę jak w warsztacie mechanika - koleś ma całą szafę narzędzi i każde nadaje się do czegoś innego.
Klucz nasadowy z grzechotką jest super sprawą, ale raczej nie przyda się przy wymianie rozbitej szyby ;)

OOP to bardziej taka grzechotka z kluczem, niż klucz z grzechiotką.

0

Co zatem specjaliści polecą zamiast OOP?

cerrato
jak najwięcej GOTO :D
WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:około 8 godzin
  • Postów:5107
6

czego oni tak nie lubią tej javy

“If Java had true garbage collection, most programs would delete themselves upon execution.” — Robert Sewell

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 8 godzin
9

Dyskusja z przeciwnikami OOP jest jak kłótnia z kobietą - będą wrzeszczeć i wygadywać głupoty dopóki nie przyzna im się racji.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
0
Wibowit napisał(a):

Dyskusja z przeciwnikami OOP jest jak kłótnia z kobietą - będą wrzeszczeć i wygadywać głupoty dopóki nie przyzna im się racji.

O widzisz, to identycznie jak z zaelotami OOPu.

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

Myślę, że mogę śmiało powiedzieć że ktoś kto ma problem z programowaniem obiektowym, będzie też miał pod górkę z programowaniem proceduralnym i funkcyjnym (i ogólnie - z czystym kodem).
Patrząc na definicję języka COBOL można odnieść wrażenie że nie da się w nim nic sp... bo to nawet nie jest język proceduralny - ale to nieprawda.
Są pewne uniwersalne zasady (DRY, SOLID, YAGNI, podwójne zaprzeczenia etc.) których jeśli się nie rozumie to każdy paradygmat będzie bee.

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

OOP to cos pieknego.

W oczach widac projekt opisany obiektami i wszystko staje sie czytelne i piekne. Po prostu to znaczy wiecej niz 1000 slow, tego opisac sie nie da.

PS
Zlej baletnicy przeszkadza rabek u spodnicy.

Dziekuje i dowidzenia.

0
Uczynny Terrorysta napisał(a):

OOP to cos pieknego.

Podobnie jak "czysta rasa aryjska" dla hitlerowców

Zlej baletnicy przeszkadza rabek u spodnicy.

Też to powtarzam jak ktoś zaczyna bulgotać jakie to programowanie proceduralne jest gorsze od obiektowego

Dziekuje i dowidzenia.

No to elo na drogę.

PI
Godwin's law! Przegrywasz dyskusję.
0
vpiotr napisał(a):

Myślę, że mogę śmiało powiedzieć że ktoś kto ma problem z programowaniem obiektowym, będzie też miał pod górkę z programowaniem proceduralnym i funkcyjnym (i ogólnie - z czystym kodem).

Ło, ale pojechałeś po developerach UNIXowych, oni szkalują OOP bardziej niż karachan papieża. Trudno o nich powiedzieć jednak, by parcując na kodzie o 40letniej nieraz historii tworzyli kod gorszy niż niejeden kiluletni OOPowy makaronik z czołowych korpo i januszeksów. Wręcz bym powiedział, że nad nim gurują o wiele długości piaskownicy.

KR
Akurat Unix to kwintesencja obiektowości i polimorfizmu. To, że napisany w C o niczym nie świadczy.
fasadin
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
3

w linku sa wypowiedzi ktore jeszcze niektore sa wyrwane z kontekstu np wypowiedz Linus Torvalds (2007) jest o jezyku a nie o OOP :D

argumenty a nie wypowiedzi innych. Argument bo ktos tak powiedzial nie jest argumentem (w tym temacie, odnosze sie do konkretnego przykladu ktory OP podlinkowal). Nawet zeby ten ktos byl najlepszy na swiecie. Bez podania wyjasnienia taki argument (jest domniemany) nie ma znaczenia w dyskusji.

edytowany 4x, ostatnio: fasadin
Zobacz pozostałe 3 komentarze
cerrato
Tylko to wyrwanie z kontekstu to jest zarzut nie pod adresem cytowania autorytetów, ale osób, które robią to w manipulacyjny sposób. A z rozmową na żywo masz rację - to jedyna sytuacja, w której nie ma ryzyka, że ktoś coś przekręci i wykorzysta wypowiedź fachowca niezgodnie z jej zamierzeniem (a nawet jeśli tak zrobi, to są duże szanse, że autor zaraz sprawę wyjaśni / sprostuje)
fasadin
ale moj zarzut jest do tego jak argument w tym temacie byl przedstawiony a nie mowie o cytowaniu jako ogolu...
cerrato
W takim razie się nie dogadaliśmy. Dla mnie fragment "Argument bo ktos tak powiedzial nie jest argumentem. Nawet zeby ten ktos byl najlepszy na swiecie" jest raczej ogólnym podważeniem powoływania się na autorytety - przynajmniej ja go tak odebrałem.
fasadin
lepiej :)?
cerrato
Tak. Znowu Cię kocham :*
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1
Złoty Samiec napisał(a):
vpiotr napisał(a):

Myślę, że mogę śmiało powiedzieć że ktoś kto ma problem z programowaniem obiektowym, będzie też miał pod górkę z programowaniem proceduralnym i funkcyjnym (i ogólnie - z czystym kodem).

Ło, ale pojechałeś po developerach UNIXowych, oni szkalują OOP bardziej niż karachan papieża. Trudno o nich powiedzieć jednak, by parcując na kodzie o 40letniej nieraz historii tworzyli kod gorszy niż niejeden kiluletni OOPowy makaronik z czołowych korpo i januszeksów. Wręcz bym powiedział, że nad nim gurują o wiele długości piaskownicy.

Wypowiedź tak ogólna że dziwię się że nie napisałeś o "amerykańskich uczonych".
A nawet gdybyś kogoś konkretnie zacytował to wyrwane z kontekstu wypowiedzi Twoich autorytetów o niczym nie przesądzają.
http://sciaga.pl/tekst/128235-129-erystyka-przyklady-chwytow-erystycznych

Zobacz pozostały 1 komentarz
vpiotr
W takim razie jest nas co najmniej dwóch :)
jarekczek
Świetny link. Ale pisze tam "Wypowiedzi autorytetów danych dziedzin nie zawsze jednak świadczą o ich słuszności". Czyli uznają jednak, że autorytet to autorytet - przeważnie ma rację.
vpiotr
@jarekczek: w dzisiejszych czasach nie ma autorytetów absolutnych. Guru dla jednego będzie głupcem dla innego.
jarekczek
W dzisiejszych czasach? A kiedy było inaczej?
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:3 minuty
  • Postów:4884
0

Można powiedzieć, że mamy w programowaniu dwie metody postępowania: Złożoność i komplikacje schować za interfejsem (oddzielić od użytkownika); Abstrakcję zamykać w oddzielnych kawałkach kodu.
Można to zrealizować różnie, funkcyjnie, obiektowo, proceduralnie. Nawet @Wibowit, popierający zawsze OOP, nie powie Ci, że jest to [OOP] jedyna droga do inżynierii oprogramowania; po prostu jest to wygodne, łatwe(w sumie), rozwinięte i rozpowszechnione. Jak umiesz programować to w każym paradygmacie powtórzysz wzorce. A Ty mógłbyś napisać coś konstruktywnego, zamiast wrzucać linka z cytatami i tworzyć niecenzuralne tagi.


edytowany 1x, ostatnio: lion137
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
1

No własnie, przecież i obiektowe i proceduralne i funkcyjne mają swoje zastosowania, co więcej łączy się je w językach programowania (np. Scala czy Java).


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 13 godzin
  • Lokalizacja:Wrocław
2

Zbiór cytatów losowych osób to nie jest dyskusja.

AF
Dyskusja jest w komentarzach.
B4
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:16
0

Ja obiektowki nie lubie bo na razie nie bardzo ja umiem ;). Za to kocham programowanie funkcyjne.

HA
Nigdy nie zrozumiesz oop w całości. Oop wygląda ładnie w tutorialach i podręcznikach, ale niestety zbytnie skomplikowanie kłóci się z samą ideą oop. które miało być intuicyjne - nawiązując do świata rzeczywistego
zyxist
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 6 lat
  • Postów:101
9

Podchodzę do OOP bardziej jak do narzędzia. Po pierwsze, nie ma narzędzi uniwersalnych, które rozwiązują wszystkie problemy świata. Po drugie, w programowaniu oprócz paradygmatów są też pewne hmmm... powiedzmy, że prawa, których ignorowanie prowadzi do kłopotów. Przykładowo, weźmy jedną wypowiedź ze strony:

Rich Hickey (2010)
SE Radio, Episode 158
"I think that large objected-oriented programs struggle with increasing complexity as you build this large object graph of mutable objects. You know, trying to understand and keep in your mind what will happen when you call a method and what will the side effects be."

I pytanie moje brzmi: czy to naprawdę wina OOP, że gość se zbudował w jakimś języku X "large graph of mutable objects", bo mógł? Znam, widziałem i mogę przytoczyć przykład chwalonego projektu, gdzie 60% klas było niezmiennych, zdecydowana większość pozostałych - klasy krótkożyjących obiektów niewychodzących poza jeden wątek, a długożyjące obiekty ze zmiennym stanem można było policzyć na palcach. Różnica w jakości pracy pomiędzy nim, a innym projektem napisanym właśnie jako "large graph of mutable objects" porażająca, a i w jednym, i w drugim było OOP.

Myślę, że część nieporozumień bierze się z tego, że pojęcia takie, jak "programowanie funkcyjne" czy "OOP" funkcjonują w naszych głowach jako mieszanki wielu czasem bardzo odległych od siebie rzeczy i jak coś nie wychodzi, próbujemy oceniać naszą własną, unikalną mieszankę. Dla mnie na przykład paradygmatem przeciwstawnym do programowania funkcyjnego jest raczej programowanie imperatywne. OOP rozwiązuje problem trochę z innej bajki. Często natykam się na projekty napisane w językach "nie-OOP", np. C, czy nawet jakieś języki funkcyjne, gdzie bez trudu da się znaleźć partie kodu, które przy pomocy dostępnych konstrukcji tworzą ni mniej, ni więcej, tylko obiekty :). Można się zarzekać, że nie, że co jak, ale kurde... jeśli coś wygląda jak obiekt i zachowuje się jak obiekt, to najwidoczniej jest obiektem :D. Dlatego właściwsze pytanie brzmi: czy faktycznie do rozwiązania naszego problemu potrzebujemy języka z rozbudowanym narzędziem o nazwie "OOP" czy wystarczy nam zamodelowanie obiektów przy użyciu czegoś innego tam, gdzie ich naprawdę potrzeba, i wykorzystanie zalet innego podejścia?

Oddzielną kwestią jest to, że implementacje OOP dają nam do rąk także narzędzia, co do których praktyka pokazała, że przydają się raczej rzadko (dziedziczenie), a jeśli są nadużywane, naprawdę mogą narobić problemów. Mimo to poświęca się im niewspółmiernie dużo czasu. Ale od istnienia takich min to chyba nic nie jest wolne - mądry człowiek po prostu ich nie używa, jeśli naprawdę nie musi, i po sprawie.

A już tak z trochę innej bajki - trafiłem na blog yegora już kilkakrotnie i hmmm... gość lubi "naginać" różne rzeczy tak, by pasowały do jego światopoglądu. Problem polega na tym, że to się niestety sprzedaje... napisz coś tak, by wywołało kontrowersje i te kontrowersje już pociągną resztę :).


xxx_xx_x
I do tego jeszcze masowe tworzenie set/get bo może się przyda a do tego ide je generuje automatycznie ;p Każdy set i get psuje enkapsulacje i sprawia ze obiekt staje się trudny w utrzymaniu.
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 8 godzin
3

Gwoli ścisłości to "large graph of mutable objects" nie ma nic wspólnego z OOP, no może poza nazwą object. Zamiast object można wstawić strukturę z C czy Rusta i wyjdzie na to samo - dalej będziemy mieć duży graf mutowalnych struktur. Każdy język niefunkcyjny pozwala się łatwo zakopać w takich grafach.

W językach funkcyjnych na upartego można by odtworzyć problemy związane z duzymi mutowalnymi grafami, ale wtedy trzeba tworzyć masę funkcji, które przyjmują i zwracają niepotrzebnie rozbudowane dane.

Często natykam się na projekty napisane w językach "nie-OOP", np. C, czy nawet jakieś języki funkcyjne, gdzie bez trudu da się znaleźć partie kodu, które przy pomocy dostępnych konstrukcji tworzą ni mniej, ni więcej, tylko obiekty :). Można się zarzekać, że nie, że co jak, ale kurde... jeśli coś wygląda jak obiekt i zachowuje się jak obiekt, to najwidoczniej jest obiektem :D.

Świetnie ujęte!


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
HA
  • Rejestracja:około 7 lat
  • Ostatnio:prawie 7 lat
  • Postów:4
0

Ktoś mądry napisał w necie o obiektówce coś takiego
"połowę rzeczy w programowaniu obiektowym jest łatwe i intuicyjne, druga połowa jest nieintuicyjna, i niepotrzebnie skomplikowana"

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 8 godzin
2

Jeśli chcesz zobaczyć niepotrzebnie skomplikowane twory to wystarczy przejrzeć co bardziej ekstremalne biblioteki funkcyjne, np Haskellowe szaleństwo monadowe bądź cała biblioteka scalaz. A może one wcale nie są ekstremalne? Programowanie funkcyjne tylko na początku jest przystępne, przy przechodzeniu w coraz bardziej zaawansowane konstrukcje traci się poczucie sensu tego wszystkiego. Dlatego ja wolę mieszaninę FP i OOP, jak w Scali.

Simplicity is hard.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 2x, ostatnio: Wibowit
TA
To fakt - jechanie po OOP ze ciezkie i chwalenie funkcyjnego ze super to taka mala wielka hipokryzja
LukeJL
ja nie rozumiem, czemu ludzie przecistawiają OOP vs. funkcyjne. Przecież to nie jest żadne przeciwieństwo, można to ze sobą łączyć w ten czy inny sposób. W szczególności łatwo można programować funkcyjnie w OOP, pod warunkiem, że obiekty się nie mutują w żaden sposób. Czyli wywalasz mutowalność z OOP i masz programowanie funkcyjne (tak w skrócie).
Wibowit
Nasz forumowy troll twierdzi, że mieszanie (łączenie) paradygmatów wprowadza chaos, ale to pewnie dlatego, że chce sobie potrollować.
W0
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 3 godziny
  • Postów:3539
2

Uwielbiam te dyskusje purystów :)

Zacznijmy od podstawowych faktów. Twierdzenie, że OOP jest złe i programowanie funkcyjne jest lepsze jest tak samo zasadne, jak twierdzenie, że opony zimowe są gorsze od letnich bo motory fajniej wyglądają od samochodów.

Są trzy paradygmaty programowania związane z przepływem kodu:

  • imperatywny (program wykonuje obliczenia w kolejności zadanej przez programistę - czyli czysta Java w starszych wersjach)
  • deklaratywny (program wykonuje obliczenia w momencie, kiedy je można wykonać - czyli tak, jak Spring wstrzykuje zależności)
  • funkcyjny (program wykonuje obliczenia w momencie kiedy są one potrzebne)

Natomiast programowanie obiektowe wyklucza programowanie strukturalne.

To, że Java jest językiem imperatywno-obiektowym, do którego doklepano różne mechanizmy pozwalające na programowanie deklaratywne (annotacje) lub funkcyjne (cały pakiet java.util.function) nie zmienia faktu, że samo OOP nie ma nic do bycia funkcyjnym. Można wzorem Javy właśnie uznać monady za obiekty i co się stanie? Nic, dalej będzie można składać sobie funkcje w długie łańcuchy. Ot tyle.

Co do argumentu "OOP jest be ponieważ widziałem słaby soft napisany w OOP" - poczekajcie, aż FP stanie się mainstreamowe, wtedy będziecie się zastanawiać gdzie breakpointa postawić.

FE
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 3 lata
5
wartek01 napisał(a):

Są trzy paradygmaty programowania związane z przepływem kodu:

  • imperatywny (program wykonuje obliczenia w kolejności zadanej przez programistę - czyli czysta Java w starszych wersjach)
  • deklaratywny (program wykonuje obliczenia w momencie, kiedy je można wykonać - czyli tak, jak Spring wstrzykuje zależności)
  • funkcyjny (program wykonuje obliczenia w momencie kiedy są one potrzebne)

???
Skąd ty te definicje sobie wziąłeś? Szczególnie tą funkcyjną.


edytowany 1x, ostatnio: Fedaykin
0

Ja glownie programuje w pracy w C++, ale w domu chetnie poznaje inne paradygmaty. Gdy uczylem sie F# to zauwazylem, ze moj kod C++ w pracy staje sie coraz mniej obiektowy i coraz bardziej proceduralny i funkcyjny (na ile to C++ pozwala). Wciaz uzywalem klas ale w znacznie mniejszym stopniu niz robilem to kiedys.

W0
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 3 godziny
  • Postów:3539
0
Fedaykin napisał(a):
wartek01 napisał(a):

Są trzy paradygmaty programowania związane z przepływem kodu:

  • imperatywny (program wykonuje obliczenia w kolejności zadanej przez programistę - czyli czysta Java w starszych wersjach)
  • deklaratywny (program wykonuje obliczenia w momencie, kiedy je można wykonać - czyli tak, jak Spring wstrzykuje zależności)
  • funkcyjny (program wykonuje obliczenia w momencie kiedy są one potrzebne)

???
Skąd ty te definicje sobie wziąłeś? Szczególnie tą funkcyjną.

Z książki której tytułu nie pamiętam (dawno temu) o architekturze procesorów.

Co do funkcyjności - wykonywanie obliczeń w momencie gdy są potrzebne oznacza, że coś jest lazy-evaluated. A funkcje z definicji powinny być lazy-evaluated.
https://wiki.haskell.org/Lazy_evaluation

Lazy evaluation is a method to evaluate a Haskell program. It means that expressions are not evaluated when they are bound to variables, but their evaluation is deferred until their results are needed by other computations. In consequence, arguments are not evaluated before they are passed to a function, but only when their values are actually used.

Z drugiej strony:
https://wiki.haskell.org/Eager_evaluation

Eager evaluation is an implementation of the strict semantics as can be found in OCaml and usually in imperative languages.

edytowany 1x, ostatnio: wartek01
Zobacz pozostały 1 komentarz
W0
fasadin
bo moge Ci napisac lazy loading i eager loading w kazdym paradygmacie programowania?
W0
To zdefinuj czym jest programowanie funkcyjne według ciebie.
FE
Nie ma większego sensu podawać definicji 'wg. Ciebie', możesz sobie rzucić okiem na wikipedię - https://en.wikipedia.org/wiki/Functional_programming
W0
Czyli funkcyjne programowanie nie ma nic wspólnego z funkcyjnością, bo można je osiągnąć w większości paradygmatów programowania (nie napiszę "wszystkich" ponieważ nie znam wszystkich, chyba w Basicu z Atari XE nie da się osiągnąć lazy evaluation bo tam nie ma procedur/funkcji)? Przecież pisanie - cyt. "that treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data" - tak można pisać w większości języków.
0
Hanibal napisał(a):

Ktoś mądry napisał w necie o obiektówce coś takiego
"połowę rzeczy w programowaniu obiektowym jest łatwe i intuicyjne, druga połowa jest nieintuicyjna, i niepotrzebnie skomplikowana"

To raczej szło tak:
“The phrase "object-oriented” means a lot of things. Half are obvious, and the other half are mistakes.“ – Paul Graham
"Termin ''zorientowane obiektowo'' mieści w sobie wiele rzefczy. Połowa z nich jest oczywista, reszt jest pomyłką " – Paul Graham

Trzeźwy Karp napisał(a):

Ja glownie programuje w pracy w C++, ale w domu chetnie poznaje inne paradygmaty. Gdy uczylem sie F# to zauwazylem, ze moj kod C++ w pracy staje sie coraz mniej obiektowy i coraz bardziej proceduralny i funkcyjny (na ile to C++ pozwala). Wciaz uzywalem klas ale w znacznie mniejszym stopniu niz robilem to kiedys.

No i bardzo dobrze. Tworzenie klas do wszystkiego co się da w obecnych czasach to plaga. Zwłąszcza im młodsze pokolenie, tym bardziej wypaczone mózgi. Jeszcze trochę a dojdziemy do poziomu, gdzie będą tworzyć hierarchię klas, żeby tylko napisać program "Hello Wordl!".

0

Kilka podstawowych przewag programowania proceduralnego nad obiektowym:

  • większa swoboda i elastyczność
  • łatwiejsze debugowanie
  • bardziej intuicyjne
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 8 godzin
0
Błękitny Kot napisał(a):

Kilka podstawowych przewag programowania proceduralnego nad obiektowym:

  • większa swoboda i elastyczność
  • łatwiejsze debugowanie
  • bardziej intuicyjne

Nie zgadzam się z żadnym z punktów. Uzasadnienia nie chce mi się podawać, bo sam uzasadnienia nie podałeś.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:3 minuty
  • Postów:4884
0
Błękitny Kot napisał(a):

Kilka podstawowych przewag programowania proceduralnego nad obiektowym:

  • większa swoboda i elastyczność
  • łatwiejsze debugowanie
  • bardziej intuicyjne

A dodatkowy bonus to spaghetti przy większym projekcie:)


0
lion137 napisał(a):
Błękitny Kot napisał(a):

Kilka podstawowych przewag programowania proceduralnego nad obiektowym:

  • większa swoboda i elastyczność
  • łatwiejsze debugowanie
  • bardziej intuicyjne

A dodatkowy bonus to spaghetti przy większym projekcie:)

A nie dorzucali do tego klopsików? Spagehetti powstanie w każdym paradygmacie.

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)