Principiante: perché le operazioni non sono contenute nei comandi di uscita?

23

Sto esaminando un libro di programmazione introduttivo e elenca un semplice esempio in pseudocodice:

Start
  input myNumber
  set myAnswer = myNumber * 2
  output myAnswer
Stop

Perché non possiamo omettere la creazione di un'altra variabile chiamata myAnswer e basta mettere l'operazione nel comando di output, in questo modo:

Start
  input myNumber
  output myNumber * 2
Stop

Perché il primo è corretto e quest'ultimo no?

    
posta user1475207 10.07.2017 - 21:35
fonte

6 risposte

36

Potevi ma l'altro è così puoi vedere cosa sta succedendo e quindi puoi usare myAnswer più avanti nel programma. Se si utilizza il secondo, non è possibile riutilizzare myAnswer .

Quindi, più avanti nel programma potresti volere:

myAnswer + 5
myAnswer + 1
etc.

Potresti avere diverse operazioni per le quali vuoi usarlo.

Considera di scambiare numeri:

Start
  input myNumber
  set myAnswerA = myNumber * 2
  output myAnswerA
  set myAnswerB = myNumber * 3
  output myAnswerB
  set temp = myAnswerA
  set myAnswerA = myAnswerB
  set myAnswerA = temp
  output myAnswerA
  output myAnswerB
Stop

Sarebbe difficile senza variabili. I libri di computer sono davvero di base e la maggior parte della programmazione è facile finché non si vede la complessità. La maggior parte di tutto è banale nei tutorial, ed è solo nella complessità che vedi dove le cose fanno o non hanno senso.

    
risposta data 10.07.2017 - 21:37
fonte
33

Un altro motivo, l'assegnazione set myAnswer = myNumber * 2 fornisce il valore risultante un nome . Una persona che legge la versione a due righe del tuo codice sa solo che stampa il valore di myNumber * 2 . Una persona che legge la versione a tre righe può vedere che myNumber * 2 è la risposta .

Potrebbe non sembrare importante in un esempio così banale, ma a volte, assegnare un valore di risultato a una variabile con un nome significativo può renderlo molto più facile per gli altri programmatori per leggere e comprendere il tuo codice.

    
risposta data 10.07.2017 - 22:22
fonte
14

Questo è pseudocodice. Non è considerato alcun linguaggio particolare implementato.

Alcuni linguaggi di programmazione non supportano la valutazione di un'espressione e quindi l'uscita del risultato nella stessa riga di codice. Ad esempio la maggior parte degli assemblatori non lo supporta. Forse l'autore del libro voleva mostrare le cose a un livello basso.

    
risposta data 10.07.2017 - 21:55
fonte
9

Altre risposte hanno indirizzato gli specifici dettagli meccanici e gli esempi di quando l'una o l'altra forma sarebbe stata migliore, ma voglio citare un ulteriore background, una sorta di filosofia:

Stai imparando una lingua.

Un linguaggio è qualcosa in cui le idee possono essere espresse e comprese (comunicate). Un linguaggio di programmazione per computer ha la proprietà aggiuntiva che può essere analizzato meccanicamente da una macchina progettata per agire (eseguirla) sulla base di idee (decisioni) che vengono specificate e alimentate usando quella lingua.

In QUALSIASI linguaggio che sia utile, c'è più di un modo per esprimere quasi tutte le idee espresse in quel linguaggio.

Considera l'ampia varietà di sfumature disponibili in lingua inglese. Anche una semplice frase, come

The cat jumped onto the box.

può essere variato per esprimere idee leggermente diverse o porre enfasi su diverse parti della scena facendo riferimento alla stessa esatta azione dell'universo fisico.

Prima sono le variazioni grammaticali:

The box was jumped onto by the cat.

Onto the box jumped the cat.

Quindi sono variazioni più ampie e più ampie, sempre riferite alla stessa azione fisica:

The box shook under the impact of the cat.

The cat came down with a thud upon the top of the box.

The feline leaped lightly into the air and landed neatly on a nearby box.

Guarda le implicazioni della parola "nelle vicinanze" in quest'ultima frase. La sua inclusione trasmette un'intera nuova gamma di concetti non altrimenti presenti.

C'è sempre più di un modo per farlo, Python Zen al contrario.

Naturalmente, ci sarà UN MODO che esprime perfettamente la tua intenzione ed è il più adatto, proprio come sceglieresti UNA delle frasi inglesi sopra a seconda esattamente di ciò che volevi comunicare. Questo è di cosa parla lo Zen di Python.

Tuttavia, in un corso introduttivo di programmazione o in un corso introduttivo di inglese, devi prima apprendere i vari modi (parole, frammenti di codice) in cui puoi presentare un'idea prima di sviluppare il giudizio su < em> scegli che si adatta perfettamente.

    
risposta data 10.07.2017 - 23:54
fonte
5

Stai chiedendo solo la variabile myAnswer che sembra essere ridondante. Altre risposte spiegano già alcuni dei motivi per cui e quando avrebbe senso ometterlo o usarlo, ma eccone un altro: che ne dici di questo?

Start
  output input * 2
Stop

o anche quello

Start output input * 2 Stop

Nella maggior parte delle lingue questo funzionerebbe ancora, ma puoi leggerlo? È difficile quindi usiamo spesso le variabili helper perché i computer non sono gli unici a leggere il codice. Dobbiamo mantenerlo e comprenderlo in pochi mesi ed è ancora più difficile scrivere codice che puoi ancora unterstand in seguito poi uno funzionante ... di solito dopo solo pochi giorni non saprai perché hai fatto qualcosa in un modo specifico .

    
risposta data 11.07.2017 - 07:09
fonte
2

Puoi fare entrambe le varianti (in questo caso semplice), ma la prima variante diventa più leggibile e strutturata per casi più complessi. La prima variante mostra il modello IPO con una riga per ogni passaggio (due di quelli con il nome giusto):

Start
  input myNumber                       // Input
  set myAnswer = myNumber * 2          // Process
  output myAnswer                      // Output
Stop
    
risposta data 11.07.2017 - 13:59
fonte

Leggi altre domande sui tag