‫Hola y bienvenido.
‫En esta lección, vamos a aprender sobre un fenómeno extraño llamado parámetro externo.
‫Este es un parámetro que en lugar de pasar el valor en C++, tendemos a pasar el valor fuera de una
‫función.
‫Y también vamos a ver algo llamado referencia constante y cómo estos dos
‫conceptos se entrelazan entre sí.
‫Vamos a sumergirnos y resolver esto.
‫Ahora.
‫El lugar real donde las referencias brillan es en los parámetros de las funciones, porque cada vez que
‫creamos un tiempo delta flotante como este en nuestro componente, lo que estamos haciendo es tomar una copia de ese
‫flotador original y lo estamos pasando al función.
‫Entonces, en lugar de hacer eso, lo que podríamos querer hacer es tomar una referencia y pasar eso en su lugar.
‫Así que imaginemos que tuviéramos que crear una función para agarrarla, cada una llamada daño de impresión.
‫Y como argumento para esta función, queremos pasar un daño flotante.
‫Ahora, esto, como dije, va a hacer una copia de lo que sea que le pasemos y lo copiará en esa variable.
‫Cree esta variable de parámetro dentro de la función de daño de impresión.
‫Y necesitamos tener un valor de retorno de vacío aquí también para completarlo y un punto y coma al final.
‫Vayamos a C++ y continuemos esta conversación.
‫Vamos a crear el daño de impresión aquí.
‫Ponga el que toma una clase delante de él y pongamos algunas llaves en lugar del punto y coma.
‫Así que tenemos una copia en la variable del parámetro de daño y es seguro porque si tuviera que hacer daño
‫igual a cinco, solo estoy cambiando esta variable aquí dentro de daño de impresión.
‫Tengo una copia propia.
‫No puedo estropearlo por accidente.
‫Ahora, ¿y si no quisiera hacer una copia?
‫Mi alternativa sería tomar una referencia.
‫Entonces, lo que puedo hacer aquí es poner una referencia flotante que entra en daño de impresión,
‫y también necesito actualizar eso en el archivo C++.
‫Y luego podría tener este mensaje de registro de que estamos usando la referencia para ir y eliminar esto
‫y ponerlo en daño de impresión.
‫Así que ahora tomamos nuestro daño e imprimimos las actualizaciones de los puntos de venta, las declaraciones de registro dicen que el daño es este caso
‫de daño, es este daño.
‫Y en nuestro componente tick, lo que podemos hacer es imprimir daño y pasar la variable de daño y poner un punto y
‫coma al final.
‫Y podemos deshacernos de nuestra referencia de daño por ahora, porque lo que tenemos ahora es un flotador dañado
‫que se crea en tecnología.
‫La memoria para esto se ha creado aquí en tomar y luego vamos y se la damos a esta función de daño de impresión.
‫Pero debido a que el parámetro es una referencia, en realidad no estamos copiando este daño.
‫Estamos tomando su dirección y almacenándola en la referencia, de modo que cuando usemos esta referencia más
‫adelante, en realidad estemos accediendo a la pieza de memoria original.
‫Así que no ha tenido que ocurrir ninguna copia para que esto imprima el daño.
‫Ahora solo verifiquemos que esto realmente esté haciendo lo que esperaríamos que hiciera.
‫Si cambio el valor de daño a cinco, por ejemplo, y luego vuelvo a compilar y presiono reproducir, luego voy y miro el registro
‫de salida y la impresión de que el daño es cinco.
‫Pero como tenemos una referencia, sabemos que podemos actualizar ese valor.
‫Entonces, lo que puedo hacer es decir dentro de esta función que podría hacer, oye, el daño debería ser igual a
‫dos así.
‫Y si no tuviera cuidado, si pensara que tengo mi propia copia, podría pensar que está bien.
‫Pero en realidad en el componente de marca, lo que hemos hecho es que hemos cambiado las variables A originales.
‫Si pongo un pequeño registro aquí para inspeccionar esa variable de daño original y ponemos un porcentaje F y pasamos el
‫daño aquí, vamos a codificar en vivo y compilar eso y vamos a presionar reproducir.
‫Eche un vistazo a nuestro registro de salida y podrá ver que ahora tanto el daño como el daño original
‫se han modificado.
‫Ambos han sido cambiados al número dos, lo cual no es genial.
‫Sabes, accidentalmente podrías hacer mucho daño, si me disculpas el juego de palabras, al cambiar
‫variables que no esperabas cambiar.
‫Y aquí viene otro uso de esa palabra clave const que hemos visto en el pasado.
‫Si coloco const delante de mi referencia flotante, entonces lo que estoy diciendo aquí es que esta debería ser
‫una referencia que no se puede cambiar.
‫No puede llamar a ninguna función sin contacto en él, no puede configurarlo.
‫De ninguna manera puede cambiar el contenido de esta variable.
‫Solo puedes usarlo, solo puedes leerlo, solo puedes ver lo que hay allí.
‫Entonces, si volvemos a tomar una copia, debemos asegurarnos de que también colocamos Const aquí en los
‫parámetros y podemos continuar y compilar y verá que tenemos una falla de compilación y el error dice que
‫el daño no puede ser se le asigna porque es una variable constante.
‫Eso nos da la protección que necesitamos.
‫Entonces, en general, si estamos tratando de pasar una variable, de una manera eficiente donde no queremos tomar
‫una copia, siempre, siempre usaremos la palabra clave de contacto además de usar
‫una referencia porque esto nos impide cambiando accidentalmente ese contenido.
‫Ahora, sin embargo, a veces quieres usarlo para cambiar ese valor.
‫Y lo que podríamos tener como ejemplo, podríamos tener un valor de retorno booleano y podríamos querer decir que tiene
‫daño, pero también podríamos, como lo hicimos en Blueprint en el pasado, querer tener un segundo valor de retorno.
‫Así que podríamos decir, ¿tenemos algún daño y cuál es ese daño?
‫Bueno, en este caso, tiene sentido usar una referencia simple sin contacto, una referencia flotante.
‫El daño, y normalmente lo llamaríamos daño solo para que sea realmente visible que esto es lo que se
‫conoce como un parámetro de salida.
‫No es un parámetro para pasar cosas.
‫Es un parámetro para pasar cosas.
‫Ahora, puede ser una peculiaridad un poco rara de C++ y puede ser difícil de detectar.
‫Pero, en términos generales, si ve algún parámetro que sea una referencia pero que no esté
‫marcado como contacto, entonces puede suponer que alguien tuvo la intención de usarlo como un parámetro de salida.
‫Así que eso es lo que tenemos aquí.
‫Tenemos daños.
‫Y si tuviéramos que ir e implementar esto en el CPP, entonces podemos poner la clase "usted toma una clase"
‫al frente aquí y podemos poner nuestros paréntesis de llaves aquí.
‫Vamos a comentar el daño de impresión de impresión de línea donde no está contento porque estamos tratando
‫de establecer una referencia de contacto.
‫Y esencialmente lo que podríamos hacer aquí es algo de código, podríamos ver si tenemos algún daño
‫y luego imprimiríamos, sí, está bien.
‫El daño de salida es igual a cinco.
‫Así que ese es el daño que se ha hecho y podemos regresar.
‫Cierto, porque tenemos algunos daños que se han hecho y esto ahora podemos usarlo en algún lugar
‫como los componentes TEC para controlar el daño.
‫Así que aquí, en lugar de establecer el daño cinco, podemos obtener el daño e
‫imprimirlo si hay algún daño para que podamos decir algo similar si tiene daño y luego pasamos la variable que queremos
‫que se complete con el daño. .
‫Entonces, daño, por ejemplo, y luego podemos tener el cuerpo de nuestra declaración y solo podemos llamar daño de impresión,
‫por ejemplo, si hay algún daño para mostrar y podemos eliminarlo, lo registra por completo.
‫Entonces, esta es la forma en que usamos referencias sin contacto como parámetros de salida, una forma de obtener múltiples valores
‫de retorno de una función.
‫Y típicamente cuando hacemos esto, cuando llamamos a esta función, crearemos la variable, pero no
‫le daremos un valor inicial.
‫Entonces, en la línea 39, básicamente tengo definido un daño flotante.
‫Lo paso de inmediato en la siguiente línea.
‫Y esta es otra señal reveladora de que está utilizando un parámetro de salida.
‫No he dado ningún valor justo antes de pasarlo a una función, lo que significa que espero
‫que esa función introduzca el valor por mí.
‫Así que esto puede ser difícil de detectar al principio y puede ser un poco confuso.
‫Pero estas son las dos reglas que me gustaría que recordaras.
‫Si ve una variable declarada y no se le da un valor y se pasa instantáneamente a una función, pregúntese si ese
‫es un parámetro de salida.
‫Y la otra regla es que si ve una referencia como un parámetro, pero no está contenido, eso también podría ser una
‫pista de que se trata de un parámetro de salida.
‫Y, por supuesto, si la variable o el parámetro se nombra como algo, entonces eso es un claro indicativo de que esta cosa
‫está destinada a ser un parámetro de salida.
‫Buena cosa.
‫Creo que eso nos ha preparado muy bien para poder hacer un barrido.
‫Así que te veré en la próxima conferencia.