CursosEmpresasBlogLiveConfPrecios

Void y never

Clase 11 de 32 • Curso de TypeScript 3

Clase anteriorSiguiente clase

Contenido del curso

Introducción a TypeScript

  • 1
    El lenguaje de programación TypeScript

    El lenguaje de programación TypeScript

    08:43 min
  • 2
    Instalación de herramientas para TypeScript

    Instalación de herramientas para TypeScript

    05:47 min
  • 3

    Instalación de herramientas en Windows

    01:05 min
  • 4
    Navegación y refactorización

    Navegación y refactorización

    04:37 min

Entorno de Desarrollo

  • 5
    El compilador de TypeScript

    El compilador de TypeScript

    08:00 min
  • 6
    El archivo de configuración de TypeScript

    El archivo de configuración de TypeScript

    07:22 min
  • 7
    Mi primer proyecto TypeScript

    Mi primer proyecto TypeScript

    05:09 min

Tipos en TypeScript

  • 8
    Tipado en TypeScript

    Tipado en TypeScript

    01:37 min
  • 9
    Number, Boolean y String

    Number, Boolean y String

    14:09 min
  • 10
    Any

    Any

    08:28 min
  • 11
    Void y never

    Void y never

    Viendo ahora
  • 12
    null y undefined

    null y undefined

    11:03 min
  • 13
    Object

    Object

    07:44 min
  • 14
    Array

    Array

    09:44 min
  • 15
    Tupla

    Tupla

    11:25 min
  • 16
    Enum

    Enum

    10:59 min
  • 17
    Unión de Tipos, Alias y Tipos Literales

    Unión de Tipos, Alias y Tipos Literales

    11:58 min
  • 18
    Aserciones de tipo

    Aserciones de tipo

    11:26 min
  • 19
    Funciones en TypeScript

    Funciones en TypeScript

    14:19 min
  • 20
    Resumen

    Resumen

    06:54 min

Tipos Personalizados

  • 21
    Interfaces

    Interfaces

    10:18 min
  • 22
    Interfaces: propiedades opcionales

    Interfaces: propiedades opcionales

    10:57 min
  • 23
    Extensión de interfaces

    Extensión de interfaces

    10:54 min
  • 24
    Clases

    Clases

    14:02 min
  • 25
    Clases públicas y privadas

    Clases públicas y privadas

    15:10 min
  • 26
    Métodos Get y Set

    Métodos Get y Set

    08:46 min
  • 27
    Herencia de clases y propiedades estáticas

    Herencia de clases y propiedades estáticas

    17:41 min
  • 28
    Resumen

    Resumen

    13:24 min

Módulos

  • 29
    Principios de responsabilidad única

    Principios de responsabilidad única

    15:03 min
  • 30
    Resolviendo módulos

    Resolviendo módulos

    10:04 min
  • 31
    Webpack y agrupación de Módulos

    Webpack y agrupación de Módulos

    14:02 min

Cierre

  • 32
    Cierre

    Cierre

    00:57 min
Tomar examen

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads
        david bryan alcocer cañete

        david bryan alcocer cañete

        student•
        hace 6 años

        Tipo Void: Representa la ausencia de tipo. usado en funciones que no retornan nada. Tipo Never: Representa funciones que lanzan excepciones o nunca retornan un valor.

          Luis Abdel Rangel Castro

          Luis Abdel Rangel Castro

          student•
          hace 6 años

          un return; lo que hace es terminar la ejecución de la función si devolver algo.

          function showInfo(user: any): void { console.log('User Info',user.id); if (1 === 1) { return; } console.log('hello'); return; } showInfo({id:11});
          Darwin Rodríguez

          Darwin Rodríguez

          student•
          hace 5 años

          Si pero recuerda que también existen subtipos dentro de void (null y undefined)

        Nicolas Castañeda

        Nicolas Castañeda

        student•
        hace 5 años

        Tipo Void: Son funciones que no ++necesitan++ de un retorno, por lo que al asignar el tipo void se sobre entiende que estas funciones retornan un undefind o un valor no definido, mas si permiten el uso de este return con este valor, que en el futuro puede ser usado para la terminacion de una funcion de este tipo.

        Tipo Never: En este caso son funciones que ++nunca++ retornaran un valor, dentro de TS si intentas retornar un valor en una funcion Never te marcara error, normalmente usada para errores ya que son funciones que no retornan un valor sino que lanzan o arrojan un error o mensaje al ejecutarse, cabe destacar tambien que las variables declaradas como nulas no permiten que se les asigne ningun tipo de dato, caso contrario a los void que permite la asignacion del dato undefind

        Francisco Javier Antúnez Durán

        Francisco Javier Antúnez Durán

        student•
        hace 6 años

        Código de la clase:

        // type void for functions // Explicit type function showInfo(user: any): any { console.log(`User Info ${user.id} ${user.username} ${user.firstname}`); // return 'hola'; } showInfo({id: 1, username: 'Antúnez Durán', firstname: 'Francisco Javier'}); // Inferred type function showFormattedInfo(user: any) { console.log(`User Info, id: ${user.id} username: ${user.username} firstname: ${user.firstname}`); } showFormattedInfo({id: 1, username: 'Antúnez Durán', firstname: 'Francisco Javier'}); // Type void as variable data type let unusable: void; // unusable = null; --> colocar "strict": false en tsconfig.json para poder hacer uso unusable = undefined; // Type never function handleError(code: number, message: string): never { // Process your code // Generate a message throw new Error(`${message}. Code: ${code}`); } try { console.log('La funcion handleError no devuelve nada bajo esta linea'); handleError(404, 'Not found'); } catch (error) {} function sumNumbers(limit: number): never { let sum = 0; while (true) { sum++; } // return sum; } sumNumbers(10); // --> Llamada a un bucle infinito no acabaria nunca, typescript no compila, al verlo.
        Javi Felices

        Javi Felices

        student•
        hace 6 años

        El declarar una función como void o never, a efectos de resultado, produce el mismo. El tipo void lo tengo claro, en cambio a never no le veo a utilidad como tal.

          Jean Carlos Hernandez Carrasquel

          Jean Carlos Hernandez Carrasquel

          student•
          hace 5 años

          El detalle está en que las funciones tipo void realizan algo y terminan su flujo (sentencias, instrucciones...), por defecto al no retorna nada (ningún dato) devuelven undefined (pero terminan y devuelven algo). En cambio las tipo never son las que nunca retornar, se podría ver como que no terminan sus instrucciones, por ello los ejemplos son lanzando una excepción (que por definición interrumpe la ejecución normal del código) y generando un bucle infinito. Esa es la gran diferencia entre void y never, la primera termina su código pero no retorna datos, la otra no termina y, por ende, nunca retorna. never en TypeScript es muy útil precisamente para manejo de errores como se comentó en el ejemplo

          Jaime David Burbano Montoya

          Jaime David Burbano Montoya

          student•
          hace 5 años

          De pronto en el asincronismo puedes verle una aplicación más real

        Jhon Alexander Romero Gonzaga

        Jhon Alexander Romero Gonzaga

        student•
        hace 6 años

        Un poco confuso a la primera pero ya lo tengo casi entendido.
        Para los que se pregunten porque pone "any" en vez de "void" ahora explico. Una función al declararla de manera inferencial por lo general se encuentra con el tipo "any":

        // Es como tener tipo :any, pero // como no retorna nada lo asigna a tipo :void function unaFuncion() { // Código... }

        y cuando no retorna un valor esta función, la inferencia que hara typescript sera ponerla en tipo void

        // Si asignamos :any va a pasar lo mismo // que en las variables y podemos retornar // cualquier tipo de valor ya sea un string, // boolean, etc., o no retornar nada. function unaFuncion(): any { console.log("Hola mundo") }

        por esa razón el profesor pone de tipo any en la función para que pueda retornar o no retornar un valor.

          Juan Francisco Cevallos Valdivieso

          Juan Francisco Cevallos Valdivieso

          student•
          hace 6 años

          Exacto, void es una función que no retorna valor, mientras tanto en any podría hacerlo

          Javi Felices

          Javi Felices

          student•
          hace 6 años

          Creo que lo que nos ha podido descolocar es que ha usado más any que void, pero entiendo que void es simple, es un tipo que no devuelve nada, y como any tiene más particularidades por eso se ha usado más, y por eso entiendo que lo ha colocado en la primera función, que nos ha podido despistar.

          La función showFormatedInfo que se declara de forma inferida hace referencia a void

        John David Gómez Huertas

        John David Gómez Huertas

        student•
        hace 6 años

        No sé si fue que me perdí pero creo que al rededor del minuto 3:37 hubo un error porque estábamos viendo la declaración de que la función no retorna un valor dándole como tipo de retorno void y se colocó fue any :S

          Enrique Tecayehuatl

          Enrique Tecayehuatl

          student•
          hace 6 años

          Como dice @david en el comentario de arriba, solo usas never cuando en tu función vas a retornar nada o una excepción, mira esta respuesta

          JOSE LUIS GUILLÉN BLASCO

          JOSE LUIS GUILLÉN BLASCO

          student•
          hace 5 años

          @jdgomezh llevas razón. Debió indicar void.

        Alex Camacho

        Alex Camacho

        teacher•
        hace 5 años
        1. Void. Este tipo es lo opuesto al tipo anterior ya que representa la ausencia de tipo, es utilizado comúnmente como el tipo de retorno en funciones.

          // Explícito function showInfo (user: any): void { console.log('User info', user.id, user.userName, user.firstName) } showInfo({ id: 1, username: 'Alex', firstName: 'Alejandra' })

          También podemos trabajar con variables tipo void, estas variables solo aceptan valores null o undefined.

        2. Never. Es un tipo de dato especial en TypeScript, representa el tipo de valor que nunca ocurre, puede ser usado en funciones que lanzan excepciones o en funciones que nunca retornan un valor.

          function handleError (code: number, message: string): never { // Process your code here // Generate a message throw new Error(`${message}. Code: ${code}`) }
        Jayro Antonio Hernández Trejo

        Jayro Antonio Hernández Trejo

        student•
        hace 6 años

        Yo usaría void, en el escenario de crear una función logger, tal como la libreria 'debug', que la llamas y ejecuta la acción de hacer un log con un namespace.

        Y Never, en el escenario de construir un errorHandler o una función de un reloj que se mantiene ejecutando. como este ejemplo: https://www.w3schools.com/js/tryit.asp?filename=tryjs_timing_clock

          Moisés Manuel Morín Hevia

          Moisés Manuel Morín Hevia

          student•
          hace 5 años

          Qué buen ejemplo ! Eres el mejor !

        Stiven Trujillo

        Stiven Trujillo

        student•
        hace 4 años

        Por qué en el tipo explicito de void, pone any en la función? es así como funciona? o el profe se equivocó y va un void?

          Jean León

          Jean León

          student•
          hace 4 años

          creo que fue un error, debió poner void

          Irving Juárez

          Irving Juárez

          student•
          hace 4 años

          Si, creo que debió haber puesto un void

        Andrés González

        Andrés González

        student•
        hace 4 años

        entiendo el uso de never con excepciones y captura de errores. Pero con funciones que de entrada sabes que van a generar un ciclo infinito, en vez de usar never por qué simplemente no usar/dejar esa función?

        Francisco Javier Antúnez Durán

        Francisco Javier Antúnez Durán

        student•
        hace 6 años

        Estaría bien poder conocer con ejemplos algo mas prácticos, el uso de Void y sobre todo de Never, en el saber que no espero, la devolución de un dato, en un función miFuncion()... que importancia tiene colocare o no el : never.

          Jayro Antonio Hernández Trejo

          Jayro Antonio Hernández Trejo

          student•
          hace 6 años

          Yo usaria void, en el escenario de crear una funcion logger, como la libreria 'debug' por ejemplo, que la llamas y ejecuta la acción de hacer un log con un namespace.

          Y Never, en el escenario de construir un errorHandler o una funcion de un reloj que se queda ejecutando. como este ejemplo: https://www.w3schools.com/js/tryit.asp?filename=tryjs_timing_clock

        Miguel Angel Reyes Moreno

        Miguel Angel Reyes Moreno

        student•
        hace 5 años

        Void y Never

        Tipo Void

        • void es lo opuesto de any, representa la ausencia de tipo
        • Comúnmente se usa como tipo de retorno en funciones

        Tipo Never

        • Representa el tipo de valor que nunca ocurre
          • Funciones que lanzan excepciones
          • Funciones que nunca retornan un valor
        Flavio Andres Pareja Torres

        Flavio Andres Pareja Torres

        student•
        hace 5 años

        En el caso que yo use algo como:

        La funcion retorna un string si encontro un dato, de otra forma retorna null.

        ¿Deberia usar Any o Void aqui?

          Nicolas Castañeda

          Nicolas Castañeda

          student•
          hace 5 años

          any ya que el tipo void no te permitira nada mas alla de un undefind.

          rodrigo david rodriguez

          rodrigo david rodriguez

          student•
          hace 5 años

          Any, ya que se define como cualquier tipo, el void en si es como vacío que sugiere que no devolverás nada. Pero te recomendaría usaría el operador OR para devolver uno u otro ya si estas seguro de que solo devolverá eso 2 tipos.

        Moisés Manuel Morín Hevia

        Moisés Manuel Morín Hevia

        student•
        hace 5 años

        Void, ausencia de valor, retorno nulo en las funciones, una variable con este tipo & asigarle null/undefined Never, Valor que no ocurre, cuando se lanzan excepciones.

        Santiago Cepeda

        Santiago Cepeda

        student•
        hace 6 años

        Debi{o haber colocado void en lugar de any en el primer ejemplo

          Moisés Manuel Morín Hevia

          Moisés Manuel Morín Hevia

          student•
          hace 5 años

          Sí, también estoy de acuerdo.

        Jean León

        Jean León

        student•
        hace 4 años

        ¿por qué existe strict en el Type Cheking de tsconfig.json? si typescript ya trae el tipado fuerte. y ¿por qué usar usamos strict: false en lugar de true?.

        Jeisson Santiago Cortes Ortiz

        Jeisson Santiago Cortes Ortiz

        student•
        hace 5 años

        en el primer ejemplo colocas la funcion como tipo any pero al yo colocar el cursor sobre la firma del metodo este me muestra que es any, quise colocar como void y efectivamente cuando coloco el cursor aparece como void, ambos caso son lo mismos?

          Alex Camacho

          Alex Camacho

          teacher•
          hace 5 años

          Lo que te está mostrando es de qué tipo es la función y ese tipo depende del tipo que tú le declares.

          Dije muchas veces tipo jaja

          Jeisson Santiago Cortes Ortiz

          Jeisson Santiago Cortes Ortiz

          student•
          hace 5 años

          A vale sino que el menciona esa funcion es de tipo void pero sigue dejando el any. Tal vez me confundi jeje

        Alex Leonardo Rodriguez Carvajal

        Alex Leonardo Rodriguez Carvajal

        student•
        hace 5 años

        excelente! nunca pense lo util que pudiera ser Typescript, ya no me da miedo 😂

        Jose Daniel Hernandez Quiceno

        Jose Daniel Hernandez Quiceno

        student•
        hace 6 años

        Esta clase confunde un poco, ibamos a ver void y never pero comenzamos con any(?) que era de la clase pasada

          Enrique Tecayehuatl

          Enrique Tecayehuatl

          student•
          hace 6 años

          Bueno any infiere por default el tipo de retorno en una función o en una variable, en clases pasadas comentaba sobre el "valor inferido" que sería lo que hace any en contraste cuando declaras void sería una manera de hacer explícito un tipo de retorno, si le dices a tu función retorna un void eso es hacerlo de "manera explícita" si le dices any, el compilador va a inferir si tienes un return o no, y a partir de ello asignará un tipo de retorno, por default si no tiene un return(tipo de valor retornado) retornará void.

          Javi Felices

          Javi Felices

          student•
          hace 6 años

          Pero la función showFormatedInfo que se declara de forma inferida hace referencia a void, al no devolver, si usáramos un return, su tipo inferido sería any, por ejemplo devolver el mismo objeto.

          Lo que está claro es que sino devuelve mejor usar void para controlar más el código, verdad?

        Edgar Javier Cruz López

        Edgar Javier Cruz López

        company_admin•
        hace 6 años

        Cuál es el objetivo o ventaja de utilizar o no never?

          Moisés Manuel Morín Hevia

          Moisés Manuel Morín Hevia

          student•
          hace 5 años

          Es un código más fuerte & son buenas prácticas.