‫Ciao e Benvenuto.
‫In questa lezione impareremo uno strano fenomeno chiamato parametro esterno.
‫Questo è un parametro che invece di passare il valore in C++, tendiamo a passare il valore da una
‫funzione.
‫E vedremo anche qualcosa chiamato riferimento costante e come questi due concetti siano in qualche
‫modo intrecciati l'uno con l'altro.
‫Immergiamoci e scopriamolo.
‫Adesso.
‫Il vero posto in cui brillano i riferimenti è nei parametri delle funzioni, perché ogni volta che
‫creiamo un float delta time come questo nel nostro componente, quello che stiamo facendo è prendere una copia di quel
‫float originale e lo stiamo passando al funzione.
‫Quindi, invece di farlo, quello che potremmo voler fare è prendere un riferimento ad esso e passarlo invece.
‫Quindi immaginiamo di dover creare una funzione per afferrarlo, ciascuna chiamata danno di stampa.
‫E come argomento per questa funzione, vogliamo passare un float damage.
‫Ora, questo, come ho detto, creerà una copia di qualsiasi cosa passiamo e la copierà in quella variabile.
‫Crea questa variabile di parametro all'interno della funzione di danneggiamento della stampa.
‫E abbiamo anche bisogno di avere un valore di ritorno di void qui per completarlo e un punto e virgola alla fine.
‫Entriamo nel C++ e continuiamo questa conversazione.
‫Creiamo il danno di stampa qui.
‫Metti la tua classe davanti ad essa e mettiamo alcune parentesi graffe invece del punto e virgola.
‫Quindi abbiamo una copia nella variabile del parametro del danno ed è sicuro perché se dovessi fare un danno uguale
‫a cinque, cambierò solo questa variabile qui all'interno del danno di stampa.
‫Ne ho una copia mia.
‫Non posso rovinare tutto per caso.
‫E se non volessi farne una copia?
‫La mia alternativa sarebbe prendere un riferimento.
‫Quindi quello che posso fare qui è che posso inserire un riferimento float che va in danno
‫di stampa e devo aggiornarlo anche nel file C++.
‫E poi potrei avere questo messaggio di registro che stiamo usando il riferimento per andiamo a prenderlo e
‫metterlo in un danno di stampa.
‫Quindi ora prendiamo il nostro danno e stiamo stampando gli aggiornamenti dei suoi punti vendita, le dichiarazioni del registro dicono che il danno è un caso
‫di danno, è questo danno.
‫E nel nostro componente tick, quello che possiamo fare è infliggere danni alla stampa e passare nella variabile del danno e mettere il punto e
‫virgola alla fine.
‫E per ora possiamo sbarazzarci del nostro riferimento di danno, perché quello che abbiamo ora è un galleggiante danneggiato
‫che viene creato nella tecnologia.
‫La memoria per questo è stata creata qui in Take e quindi andiamo a darla a questa funzione di danno da stampa.
‫Ma poiché il parametro è un riferimento, in realtà non stiamo copiando questo danno.
‫Stiamo prendendo il suo indirizzo e memorizzandolo invece nel riferimento in modo che quando utilizziamo questo riferimento
‫lungo la linea, stiamo effettivamente accedendo al pezzo di memoria originale.
‫Quindi nessuna copia è stata necessaria per stampare il danno.
‫Ora controlliamo solo che questo stia effettivamente facendo ciò che ci aspetteremmo che facesse.
‫Se cambio il valore del danno a cinque, per esempio, e poi ricompilo e premo play, allora vai a dare un'occhiata al
‫registro di output e alla stampa che il danno è cinque.
‫Ma poiché abbiamo un riferimento, sappiamo che possiamo aggiornare quel valore.
‫Quindi quello che posso fare è che potrei dire all'interno di questa funzione che potrei fare, ehi, il danno dovrebbe essere uguale a due
‫in questo modo.
‫E se non fossi stato attento, se pensassi di avere la mia copia, potrei pensare che va bene.
‫Ma in realtà nel componente tick, quello che abbiamo fatto è aver cambiato le variabili A originali.
‫Se inserisco un piccolo log qui per ispezionare quella variabile di danno originale e mettiamo una percentuale F e passiamo
‫il danno qui, eseguiamo il codice attivo e lo compiliamo e andiamo a giocare.
‫Dai un'occhiata al nostro registro di output e puoi vedere che ora il danno e il danno originale sono
‫stati entrambi modificati.
‫Entrambi sono stati cambiati al numero due, il che non è eccezionale.
‫Sai, potresti accidentalmente fare molti danni, scusando il gioco di parole, cambiando variabili che
‫non ti aspettavi di cambiare.
‫E qui arriva un altro uso di quella parola chiave const che abbiamo visto in passato.
‫Se metto const davanti al mio riferimento float, quello che sto dicendo qui è che questo dovrebbe essere
‫un riferimento che non puoi cambiare.
‫Non puoi chiamare nessuna funzione senza contatto su di esso, non puoi impostarlo.
‫Non puoi in alcun modo modificare il contenuto di questa variabile.
‫Puoi solo usarlo, puoi solo leggerlo, puoi solo vedere cosa c'è dentro.
‫Quindi, se torniamo indietro, prendo una copia, dobbiamo assicurarci di inserire anche Const qui nei parametri e
‫possiamo andare avanti e compilare e vedi che otteniamo un errore di compilazione e l'errore sta dicendo che il
‫danno non può essere assegnato ad esso perché è una variabile costante.
‫In modo che ci dia la protezione di cui abbiamo bisogno.
‫Quindi, in generale, se stiamo cercando di passare una variabile, in modo efficiente in cui non vogliamo farne
‫una copia, useremo sempre, sempre la parola chiave contact oltre a utilizzare un
‫riferimento perché questo ci impedisce di modificare accidentalmente quel contenuto.
‫Ora, tuttavia, a volte vuoi usarlo per cambiare quel valore.
‫E quello che potremmo avere come esempio, potremmo avere un valore di ritorno booleano e potremmo voler dire che ha
‫un danno, ma potremmo anche, come abbiamo fatto in Blueprint in passato, voler avere un secondo valore di ritorno.
‫Quindi potremmo dire, abbiamo qualche danno e qual è quel danno?
‫Bene, in questo caso, ha effettivamente senso usare un semplice riferimento senza contatto, un riferimento float.
‫Il danno, e in genere lo chiameremmo effettivamente danno solo per rendere davvero visibile che si
‫tratta di un cosiddetto parametro out.
‫Non è un parametro per passare le cose.
‫È un parametro per passare le cose.
‫Ora, può essere un po' una stranezza del C++ e può essere difficile da individuare.
‫Ma in generale, se vedi dei parametri che sono un riferimento ma non
‫sono contrassegnati come contatti, puoi praticamente presumere che qualcuno intendesse usarlo come parametro out.
‫Quindi è quello che abbiamo qui.
‫Abbiamo un danno.
‫E se dovessimo implementarlo nel CPP, allora possiamo mettere la classe you grab qui davanti
‫e possiamo mettere qui le parentesi graffe.
‫Commenteremo il danno di stampa dell'impronta della linea di cui non è soddisfatto perché stiamo cercando di
‫impostare un riferimento di contatto.
‫E essenzialmente quello che potremmo fare qui è che potremmo fare del codice, potremmo vedere se abbiamo qualche
‫danno e poi stampare, sì, ok.
‫I danni sono cinque.
‫Quindi questo è il danno che è stato fatto e possiamo tornare.
‫Vero, perché abbiamo qualche danno che è stato fatto e ora possiamo usarlo in qualcosa come
‫i componenti TEC per recuperare il danno.
‫Quindi qui invece di impostare il danno cinque, potremmo ottenere il danno e stamparlo se
‫c'è qualche danno così possiamo dire qualcosa del genere se ha un danno e quindi passiamo alla variabile che vogliamo
‫venga popolata con il danno .
‫Quindi il danno, ad esempio, e quindi possiamo avere il corpo della nostra dichiarazione e potremmo solo chiamare danno
‫di stampa, ad esempio, se c'è un danno da visualizzare e possiamo rimuoverlo, registri completamente.
‫Quindi questo è il modo in cui utilizziamo i riferimenti senza contatto come parametri esterni, un modo per ottenere più valori
‫di ritorno da una funzione.
‫E in genere quando lo facciamo, quando chiamiamo questa funzione, creeremo la variabile, ma non
‫le daremo un valore iniziale.
‫Quindi sulla riga 39, in pratica ho definito un danno galleggiante.
‫Lo passo subito nella riga successiva.
‫E questo è un altro segno rivelatore che stai usando un parametro out.
‫Non ho dato alcun valore prima di averlo passato in una funzione significa che mi aspetto che
‫quella funzione inserisca il valore per me.
‫Quindi questo può essere difficile da individuare all'inizio e può creare un po' di confusione.
‫Ma queste sono le due regole che vorrei che ricordaste.
‫Se vedi una variabile dichiarata ea cui non viene assegnato un valore e viene passata istantaneamente a una funzione, chiediti se si
‫tratta di un parametro out.
‫E l'altra regola è se vedi un riferimento come parametro, ma non è contenuto, allora potrebbe anche essere
‫un suggerimento che questo è un parametro out.
‫E ovviamente, se la variabile o il parametro ha un nome, allora è un chiaro indizio che questa
‫cosa dovrebbe essere un parametro out.
‫Roba fantastica.
‫Penso che questo ci abbia preparato molto bene per essere in grado di fare una spazzata.
‫Allora ci vediamo alla prossima lezione.