Przeglądam wstępną książkę programistyczną, która zawiera prosty przykład w pseudokodzie:
Start
input myNumber
set myAnswer = myNumber * 2
output myAnswer
Stop
Dlaczego nie możemy pominąć tworzenia innej zmiennej o nazwie myAnswer
i po prostu wstawić operację do polecenia wyjściowego, na przykład:
Start
input myNumber
output myNumber * 2
Stop
Dlaczego to pierwsze jest poprawne, a drugie nie?
pseudocode
structured-programming
użytkownik 1475207
źródło
źródło
Odpowiedzi:
Mógłbyś, ale drugi jest po to, aby zobaczyć, co się dzieje i abyś mógł
myAnswer
później skorzystać z programu. Jeśli użyjesz drugiego, nie możesz go ponownie użyćmyAnswer
.Więc później w programie możesz chcieć:
Możesz mieć różne operacje, do których chcesz go użyć.
Rozważ zamianę numerów:
Byłoby to trudne bez zmiennych. Książki komputerowe zaczynają się naprawdę proste, a większość programowania jest łatwa, dopóki nie zobaczysz złożoności. Większość wszystkiego jest trywialna w samouczkach i tylko w złożoności widzisz, gdzie rzeczy mają lub nie mają sensu.
źródło
result
zmiennej nawet dla krótkich funkcji, dzięki czemu debugowanie przez dodawanieprint(result)
jest naprawdę szybkie. Jest to jednak bardziej wygodne niż dobre praktyki.Kolejny powód: przypisanie
set myAnswer = myNumber * 2
nadaje wartości wynikowej nazwę . Osoba czytająca dwuwierszową wersję kodu wie tylko, że wypisuje wartośćmyNumber * 2
. Osoba czytająca wersję trzywierszową może zobaczyć, żemyNumber * 2
to odpowiedź .W tak trywialnym przykładzie może to nie wydawać się ważne, ale czasami przypisanie wartości wynikowej zmiennej o znaczącej nazwie może znacznie ułatwić innym programistom odczytanie i zrozumienie twojego kodu.
źródło
i
,result
lub jakiś inny identyfikator sensu nie robi nic, aby poprawić przejrzystość i tylko zaśmieca kodui
lepiej być indeksem tablicowym. Jeśli istniejeresult
, funkcja powinna kończyć sięreturn result
na równoważniku moralnym. I tak dalej ...return result
, możesz równie dobrze po prostu w linii zwrócić to, co przypisałeś do wyniku. Widzimy, że to wynik. Zwracasz to, rozumiemy.To pseudokod. Nie powinien to być żaden konkretny zaimplementowany język.
Niektóre języki programowania nie obsługują oceny wyrażenia, a następnie wykluczają wynik w tym samym wierszu kodu. Na przykład większość asemblerów tego nie obsługuje. Być może autor książki chciał pokazać rzeczy na niskim poziomie.
źródło
Inne odpowiedzi dotyczyły konkretnych szczegółów mechanicznych i przykładów, kiedy jedna lub druga forma byłaby lepsza, ale chcę wspomnieć o nieco dalszym tle, w pewnym sensie filozoficznym:
Uczysz się języka.
Język to coś, w czym można wyrażać i rozumieć (komunikować) idee. Komputerowy język programowania ma dodatkową właściwość polegającą na tym, że może być mechanicznie analizowany przez maszynę zaprojektowaną do podejmowania działań (wykonywania) na podstawie pomysłów (decyzji) określonych i wprowadzonych za pomocą tego języka.
W KAŻDYM języku, który w ogóle jest przydatny, istnieje więcej niż jeden sposób wyrażenia prawie każdego pomysłu wyrażalnego w tym języku.
Rozważ szeroką gamę niuansów dostępnych w języku angielskim. Nawet proste zdanie, takie jak
mogą być zmieniane, aby wyrazić nieco inne pomysły lub położyć nacisk na różne części sceny , odnosząc się do tej samej dokładnej akcji wszechświata fizycznego.
Najpierw są odmiany gramatyczne:
Są coraz szersze odmiany, wciąż odnoszące się do tej samej akcji fizycznej:
Wystarczy spojrzeć na konsekwencje słowa „w pobliżu” w ostatnim zdaniu. Jego włączenie zawiera zupełnie nowy zakres pojęć, których inaczej nie ma.
Zawsze jest na to więcej niż jeden sposób, przeciwnie - Python Zen.
Oczywiście będzie JEDEN sposób, który doskonale wyraża Twoją intencję i jest najbardziej odpowiedni, tak jak wybrałbyś JEDEN z powyższych angielskich zdań, w zależności od tego, co chcesz komunikować. Właśnie o to chodzi w Zen Pythona.
Ale w trakcie wstępnego programowania lub wprowadzającym kurs angielskiego, trzeba najpierw nauczyć się różnych sposobów (sformułowań, fragmenty kodu), w którym można kanapa pomysł zanim opracuje osąd do wyboru , który jest najbardziej idealnie przylegające.
źródło
__init__
a__new__
, żeby wymienić tylko kilka. Chodzi o to, że każdy jest odpowiedni dla subtelnie innego problemu. Nie wybrałbyś przypadkowo jednego z tych angielskich zdań, ani nie wybrałbyś przypadkowo jednej z tych funkcji języka Python.Pytasz tylko o
myAnswer
zmienną, która wydaje się zbędna. Inne odpowiedzi już wyjaśniają niektóre z powodów, dla których i kiedy warto je pominąć lub użyć, ale oto jeszcze jedno: co powiesz na to?a nawet to
W większości języków to nadal działałoby, ale czy możesz to przeczytać? Jest to trudne, dlatego często używamy zmiennych pomocniczych , ponieważ komputery nie są jedynymi, które czytają kod. Musimy go utrzymywać i rozumieć za kilka miesięcy, a jeszcze trudniej jest napisać kod, którego będziesz w stanie zrozumieć później niż działający ... zwykle po kilku dniach nie będziesz wiedział, dlaczego zrobiłeś coś w określony sposób .
źródło
(*2)
. Chciałbym jednak sprzeciwić się temu, że wykonywanie danych wejściowych niekoniecznie musi być wyrażone w sposób bezpieczny tylko jako dostęp do zmiennej / wykonanie operacji arytmetycznej: może mieć zauważalne skutki uboczne.Możesz zrobić oba warianty (w tym prostym przypadku), ale pierwszy wariant staje się bardziej czytelny i ustrukturyzowany dla bardziej złożonych przypadków. Pierwszy wariant pokazuje model IPO z jedną linią dla każdego kroku (dwa z już o właściwej nazwie):
źródło