Imperatywny styl programowania był praktykowany w tworzeniu stron internetowych od 2005 do 2013 roku.
W przypadku programowania imperatywnego napisaliśmy kod, który dokładnie wyszczególniał, co powinna robić nasza aplikacja, krok po kroku.
Funkcjonalny styl programowania tworzy abstrakcję poprzez sprytne sposoby łączenia funkcji.
W odpowiedziach jest wzmianka o programowaniu deklaratywnym, aw związku z tym powiem, że programowanie deklaratywne wymienia pewne zasady, których mamy przestrzegać. Następnie podajemy do naszej aplikacji coś, co nazywamy stanem początkowym, i pozwalamy tym regułom definiować sposób działania aplikacji.
Teraz te krótkie opisy prawdopodobnie nie mają większego sensu, więc przejrzyjmy różnice między programowaniem imperatywnym i deklaratywnym, przechodząc przez analogię.
Wyobraź sobie, że nie tworzymy oprogramowania, ale zamiast tego zarabiamy na życie pieczeniem ciast. Być może jesteśmy złymi piekarzami i nie wiemy, jak upiec pyszne ciasto tak, jak powinniśmy.
Więc nasz szef daje nam listę kierunków, co znamy jako przepis.
Przepis podpowie nam, jak zrobić ciasto. Jeden przepis jest napisany imperatywnym stylem:
- Wymieszaj 1 szklankę mąki
- Dodaj 1 jajko
- Dodaj 1 szklankę cukru
- Wlej mieszaninę na patelnię
- Wstaw patelnię do piekarnika na 30 minut i 350 stopni F.
Deklaratywny przepis wykonałby następujące czynności:
1 szklanka mąki, 1 jajko, 1 szklanka cukru - stan początkowy
Zasady
- Jeśli wszystko jest wymieszane, umieść na patelni.
- Jeśli wszystko jest niezmieszane, włóż do miski.
- Jeśli wszystko jest na patelni, wstaw do piekarnika.
Tak więc podejścia imperatywne charakteryzują się podejściem krok po kroku. Rozpoczynasz od kroku pierwszego i przechodzisz do kroku 2 i tak dalej.
W końcu otrzymujesz produkt końcowy. Robiąc to ciasto, bierzemy te składniki, mieszamy je, wkładamy na patelnię i do piekarnika, a otrzymujemy produkt końcowy.
W świecie deklaratywnym jest inaczej. W recepturze deklaratywnej podzielilibyśmy nasz przepis na dwie oddzielne części, zaczynając od jednej części, która zawiera stan początkowy receptury, podobnie jak zmienne. Zatem naszymi zmiennymi są tutaj ilości naszych składników i ich rodzaj.
Bierzemy stan początkowy lub składniki początkowe i stosujemy do nich pewne zasady.
Więc bierzemy stan początkowy i powtarzamy te zasady w kółko, aż będziemy gotowi do spożycia rabarbarowego ciasta truskawkowego lub czegokolwiek innego.
Dlatego w podejściu deklaratywnym musimy wiedzieć, jak prawidłowo ustrukturyzować te reguły.
Więc zasady, które moglibyśmy chcieć zbadać nasze składniki lub stan, jeśli zostaną zmieszane, włóż je do garnka.
Z naszym stanem początkowym to nie pasuje, ponieważ nie wymieszaliśmy jeszcze naszych składników.
Tak więc zasada 2 mówi, że jeśli się nie zmieszają, wymieszaj je w misce. Okay yeah ta zasada obowiązuje.
Teraz mamy miskę mieszanych składników jako nasz stan.
Teraz ponownie stosujemy ten nowy stan do naszych zasad.
Więc zasada 1 mówi, że jeśli składniki są wymieszane, umieść je na patelni, ok, tak, teraz obowiązuje zasada 1, zróbmy to.
Teraz mamy ten nowy stan, w którym składniki są mieszane i na patelni. Zasada 1 nie ma już zastosowania, zasada 2 nie ma zastosowania.
Zasada 3 mówi, że jeśli składniki są na patelni, umieść je w piekarniku, świetnie, że zasada dotyczy tego nowego stanu, zróbmy to.
I kończymy na pysznej gorącej szarlotce lub czymkolwiek.
Teraz, jeśli jesteś podobny do mnie, możesz pomyśleć, dlaczego nadal nie robimy programowania imperatywnego. To ma sens.
Cóż, w przypadku prostych przepływów tak, ale większość aplikacji internetowych ma bardziej złożone przepływy, których nie można prawidłowo uchwycić za pomocą imperatywnego projektowania programowania.
W podejściu deklaratywnym możemy mieć pewne składniki początkowe lub stan początkowy, np. textInput=“”
Pojedynczą zmienną.
Może tekst zaczyna się od pustego ciągu.
Bierzemy ten stan początkowy i stosujemy go do zestawu reguł zdefiniowanych w Twojej aplikacji.
Jeśli użytkownik wprowadzi tekst, zaktualizuj wprowadzanie tekstu. Cóż, teraz to nie ma zastosowania.
Jeśli szablon jest renderowany, oblicz widget.
- Jeśli textInput zostanie zaktualizowany, ponownie wyrenderuj szablon.
Cóż, nic z tego nie ma zastosowania, więc program po prostu zaczeka na jakieś wydarzenie.
Tak więc w pewnym momencie użytkownik aktualizuje wprowadzany tekst, a następnie możemy zastosować regułę numer 1.
Możemy to zaktualizować do “abcd”
Więc właśnie zaktualizowaliśmy nasze aktualizacje text i textInput, reguła numer 2 nie ma zastosowania, reguła numer 3 mówi, że jeśli wprowadzanie tekstu to aktualizacja, która właśnie nastąpiła, to ponownie renderuj szablon, a następnie wracamy do reguły 2, która mówi, że szablon jest renderowany , obliczyć widget, w porządku, obliczmy widget.
Ogólnie rzecz biorąc, jako programiści, chcemy dążyć do bardziej deklaratywnych projektów programistycznych.
Imperatyw wydaje się bardziej jasny i oczywisty, ale podejście deklaratywne daje się bardzo dobrze skalować w przypadku większych aplikacji.