Invece di funzioni , inizia con le subroutine . Dì loro che un programma è solo un elenco di istruzioni, una ricetta per dire al computer come fare qualcosa. E che viene eseguita un'istruzione dopo l'altra (con la possibilità di fare alcuni passi in parallelo, ma ne parleremo più avanti).
Alcuni compiti sono abbastanza comuni e ripetitivi, quindi sarebbe terribile se dovessimo scriverli sempre più volte, quindi li scriviamo solo una volta e ne facciamo un "programma più piccolo" - un sottoprogramma , che può essere riutilizzato da altre parti del programma. Per poterlo eseguire più di una volta, gli diamo un nome significativo nel nostro programma. E quindi possiamo usare quel nome quando vogliamo eseguire questo "piccolo programma" come parte di uno più grande, chiamandolo con quel nome.
Chiamare una subroutine è come evocare un demone che sa come eseguire quel compito, con il nome di quel demone. Quindi, quando vogliamo fare quel particolare compito nel nostro programma, scriviamo "chiama il demone di nome Argoth", e il demone si presenta e fa il compito per noi come gli abbiamo ordinato di fare, e poi se ne va e possiamo continuare il nostro lavoro.
A volte il demone richiede alcune informazioni aggiuntive senza le quali non può decidere quali compiti svolgere o cosa vogliamo veramente da lui. Ad esempio, se il demone dovrebbe costruire un castello, potrebbe aver bisogno di sapere dove dovrebbe costruirlo, o quanto è grande , ecc. Questi sono gli argomenti passati al demone ... Voglio dire, la subroutine, che ora diventa parametrizzato .
I parametri sono quelle informazioni che mancano, ma sono necessarie per svolgere l'attività. Cambiano leggermente ciò che la subroutine può fare. Sono come slot vuoti nella ricetta che devono essere riempiti prima che potessimo eseguirla.
Gli argomenti , d'altra parte, sono le informazioni (valori) effettive che forniamo per questi parametri.
Per quanto riguarda l'esecuzione parallela, possiamo pensarla in questo modo: c'è sempre qualcuno (o qualcosa ) che sta eseguendo il programma (l'elenco delle istruzioni). O è un altro essere umano (lo sapevi che una volta "computer" era un nome per una persona che stava eseguendo il calcolo?) O una macchina. Un programma è solo un elenco di istruzioni, non funziona da solo. Ci deve essere qualcuno o qualcosa che farà il processo computazionale(eseguire queste azioni dall'elenco). E a volte queste azioni possono essere eseguite in parallelo: possiamo distribuire le copie dell'elenco a più persone e lasciare che ognuna di esse esegua una serie diversa di attività dall'elenco, purché non si interrompano a vicenda o non devo aspettare i risultati del lavoro di qualcun altro. Questo è multithreading per te;)
Per quanto riguarda la differenza tra funzioni e subroutine (chiamate anche procedure ), la differenza abituale è che una funzione viene chiamata per calcolare un certo valore che restituisce come risultato della sua esecuzione, mentre le procedure vengono eseguite solo per divertimento;) AKA per i loro "effetti collaterali" - solo per il bene delle operazioni eseguite dalla lista.
Ma se chiamare una procedura o una funzione all'inizio crea qualche problema, puoi usare un altro termine che un tempo era popolare: saltare . Si può saltare in una subroutine, il che significa che si interrompe l'esecuzione di qualsiasi cosa si stia facendo in questo momento e "si salti" in un'altra posizione dell'elenco (o in un'altra lista) - la subroutine - per eseguire i suoi compiti. Quindi, quando finisci, "salti indietro", ovvero ritorni nel luogo in cui sei stato interrotto, in modo da poter continuare con l'attività precedente. La differenza tra chiamare e saltare è che ora sei il demone.
Per quanto riguarda i metodi menzionati qui da qualcuno, o il fatto che alcune lingue "non hanno funzioni, solo metodi" - non è del tutto corretto, perché i metodi sono funzioni! - un tipo speciale di essi: sono funzioni che vengono utilizzate per recuperare alcune informazioni incapsulate all'interno di un oggetto o per operare su di esse. Sono un "metodo per operare su quei dati". Il nome deriva dal paradigma orientato agli oggetti in cui i dati sono racchiusi all'interno di oggetti e non possono essere gestiti direttamente, solo da funzioni speciali chiamate "metodi".
Un metodo è speciale in un certo altro modo: deve sapere quale particolare oggetto deve operare / essere chiamato (l'oggetto "questo"). Ecco perché i metodi sono solitamente abbelliti con un ulteriore parametro nascosto che memorizza le informazioni sull'oggetto su cui è stato chiamato (il puntatore "questo"). Questo complica il modo in cui la funzione viene chiamata un po ', ma è un "dettaglio di implementazione" che un programmatore non dovrebbe preoccuparsi molto, purché sappia cosa sta facendo.