Ahora echemos un vistazo rápido
en el operador de encadenamiento opcional muy importante.
Así que recuerda lo que dije antes.
que cada libro tiene este campo de reseña y tiene reseñas
de esta fuente de Goodreads
y también de la biblioteca ¿algo?
Y observe cómo cada uno de ellos tiene un recuento de reseñas diferente.
Y así en esta conferencia
querremos crear una función que nos proporcione
el recuento total de reseñas de cada libro.
Entonces ese será, básicamente, este.
más este.
Suena muy fácil ¿verdad?
Y eso es porque lo es.
Así que escribamos rápidamente una función que haga eso.
Entonces digamos getTotalReviewCount
para un libro determinado.
Entonces pegamos un determinado libro.
Hagámoslo inmediatamente.
Sólo para que veamos cómo usamos esta función.
Entonces, por supuesto, nuestro libro,
aquí se podría llamar de cualquier otra manera,
solo B por ejemplo.
Porque, por supuesto, este es simplemente el valor.
que estamos pegando.
Así que creemos una variable.
para cada una de estas revisiones cuenta.
Entonces libro, punto reseñas, punto Goodreads,
reseñas de puntosCount.
Y luego lo mismo para esta biblioteca.
Libro de reseñas de puntos, biblioteca de puntos, cualquier cosa,
reseñas de puntosContar
y luego simplemente devolvemos uno más el otro.
Entonces goodread debería ser Goodreads,
más este.
esta bien.
Ahora necesitamos bloquear esto.
a la consola como siempre para obtener nuestro resultado, que es 812.
Eso funciona maravillosamente para este libro número dos.
Pero observen lo que sucede cuando usamos el libro número tres.
Así que esperemos
y de hecho el error ya aparece aquí.
Y entonces no se evalúa nada más.
Por lo tanto, no se pueden leer las propiedades del recuento de revisiones de lectura indefinidas.
Bueno, eliminemos todo este código aquí.
y entonces el error aparece aquí abajo.
Nuevamente, no se pueden leer propiedades de indefinido,
leyendo reseñasContar.
Entonces, lo que esto significa es que este libro en particular,
número tres,
aquí en las reseñas no tiene
la biblioteca cualquier cosa.
Entonces solo tiene Goodreads y por lo tanto,
esto aquí quedará indefinido.
Y luego intentamos leer reseñas.
fuera de indefinido.
Y eso, por supuesto, entonces no es posible.
Así que nuevamente el problema es
ese libro reseñas de puntos, biblioteca de puntos cualquier cosa
en este momento no está definido.
Básicamente en JavaScript
esta parte será reemplazada por indefinida.
Y luego esencialmente estamos leyendo
Recuento de reseñas de puntos indefinidos
que, por supuesto, no existe.
Y luego resulta en este error aquí mismo.
Pero, afortunadamente para nosotros, el JavaScript moderno tiene una solución.
para esto, lo que se llama encadenamiento opcional.
Y así con encadenamiento opcional
Básicamente podemos pedirle a JavaScript que solo siga preguntando aquí.
para estas próximas propiedades
en caso de que lo que viene antes realmente exista.
Así que aquí, en lugar de intentar leer siempre las reseñas.
fuera de esto,
Podemos hacerlo opcionalmente.
Pues no así, sino así.
Entonces, lo que sucede ahora es que siempre que esto aquí no esté definido,
entonces JavaScript ya ni siquiera intentará
leer reseñasCuenta fuera de esto.
Y es por eso que a esto lo llamamos encadenamiento opcional.
Así que la cadena aquí sólo continúa en caso de que
que esta parte aquí en realidad no está indefinida
o no nulo.
Entonces lo que pasa ahora es que todos
de esta cosa aquí es inmediatamente indefinida
y por lo tanto aquí obtenemos esto, no un número.
Entonces el resultado aquí sigue siendo incorrecto.
pero al menos ya no recibimos ningún error.
Así que ahora mismo no es un número.
porque este es un número y luego estamos sumando indefinido
lo cual podemos confirmar así, ¿verdad?
Y sí, obtenemos otro número.
Por lo tanto aquí ahora necesitamos establecer un valor predeterminado.
Y es por eso que aprendimos
sobre el operador fusionador de conocimientos
porque ese es realmente perfecto en esta situación.
Entonces, en este caso, simplemente decimos cero.
Así que si no hay nada aquí,
si no hay cuenta
para cualquier cosa en la biblioteca, entonces es solo cero.
Entonces simplemente sumamos cero al valor que tenemos
de Goodreads y luego obtenemos nuestro resultado final.
bueno. De nuevo, lo que está pasando aquí es que
debido a este encadenamiento opcional,
JavaScript ya no intentará leer reseñasCount
fuera de esta cosa indefinida aquí.
Entonces, antes de que tuviéramos un recuento de reseñas de puntos indefinidos,
el cual, por supuesto, no existía y nos dio error.
Pero con encadenamiento opcional, tan pronto como esto aquí
no está definido, todo,
entonces todo esto automáticamente quedará indefinido.
Entonces usamos este operador de fusión de conocimientos aquí.
para luego simplemente darnos cero en lugar de ese indefinido
aquí mismo. Ahora bien.
Entonces esto es útil
siempre que no estemos seguros de que todos los valores que esperamos
existir en un objeto.
Entonces, antes de tener esto aquí, primero tendríamos que verificar
Si en realidad hay reseñas de libros, cualquier cosa existe en la biblioteca de puntos.
Y solo entonces podríamos leer las reseñas. Contarlas.
lo cual realmente sería mucho trabajo.
Porque, por ejemplo, digamos que tampoco estamos seguros
incluso si existe alguna reseña de la biblioteca de puntos.
Por lo tanto, sería aún más seguro hacer esto también aquí.
¿Y por qué no también aquí?
Porque puede haber alguna situación en la que
Quizás el libro no tenga reseñas de Goodreads.
Así que simplemente hagamos esto siempre,
al menos siempre no estamos seguros de la estructura de datos
de los datos que estamos recibiendo.