Este documento presenta una introducción al curso de desarrollo de aplicaciones móviles en JavaScript. Incluye una sección de presentaciones de los participantes, una descripción de la metodología práctica del curso con explicaciones, ejercicios y laboratorios, instrucciones sobre cómo hacer preguntas, y un índice de los contenidos que cubrirá el curso, incluyendo conceptos básicos y avanzados de programación.
Este documento presenta una introducción a Scala, un lenguaje de programación funcional y orientado a objetos creado en 2003 por Martin Odersky. Scala compila a la máquina virtual de Java y tiene influencias de lenguajes como Java y Haskell. El documento describe características clave de Scala como su tipado estático, inferencia de tipos, sintaxis, objetos, clases, herencia, estructuras de control y funciones.
Diapositivas de la formación de C++ que imparto de vez en cuando. No están totalmente actualizadas, pero cubren hasta C++ 11, las pequeñas mejoras en C++ 14 no están.
Este documento presenta una introducción a Scala. Scala es un lenguaje de programación funcional y orientado a objetos creado en 2003 por Martin Odersky que compila a la máquina virtual de Java. El documento describe características clave de Scala como su tipado estático, influencias de Java y Haskell, ecosistema y herramientas, y proporciona ejemplos básicos de código Scala.
Scala es un lenguaje que combina la programación orientada a objetos y el paradigma imperativo, con el paradigma funcional. En esta charla nos centraremos primero en ver las características OO de Scala comparándolas con Java y luego veremos algunas de las características "funcionales" del lenguaje.
El documento describe conceptos básicos de Java como la máquina virtual de Java (JVM), programación orientada a objetos, manejo de archivos, applets, threads y más. Explica que la JVM se encuentra en cualquier equipo que navega en Internet y tiene un recolector de basura que libera memoria de forma automática, y que Java permite desarrollar programas multihilo.
1. El documento introduce el lenguaje de programación Java, el cual es orientado a objetos y multiplataforma. 2. Explica las ventajas de Java como su orientación a objetos, simplicidad, portabilidad entre plataformas, robustez y facilidades para programación en red. 3. Cubre conceptos básicos de Java como tipos de datos, declaraciones, expresiones, conversiones de tipos, instrucciones de control e introducción a clases, arreglos, argumentos de programa y manejo de excepciones.
Este documento presenta una introducción a PHP. Brevemente describe la historia de PHP desde su creación en 1995 hasta su versión actual. Explica conceptos básicos como la sintaxis, variables, tipos de datos, arrays, estructuras de control y funciones.
Este documento describe los fundamentos de la programación orientada a objetos en JavaScript, incluyendo el uso de prototipos, clases, herencia y técnicas de reutilización como mixins y traits. Explica que JavaScript usa herencia basada en prototipos donde los objetos heredan propiedades de otros objetos a través de una cadena de prototipos. También cubre cómo crear clases y objetos, y técnicas como mixins y traits para reutilizar código de manera más flexible que la herencia tradicional.
Este documento presenta una introducción a Scala, un lenguaje de programación funcional y orientado a objetos creado en 2003 por Martin Odersky. Scala compila a la máquina virtual de Java y tiene influencias de lenguajes como Java y Haskell. El documento describe características clave de Scala como su tipado estático, inferencia de tipos, sintaxis, objetos, clases, herencia, estructuras de control y funciones.
Diapositivas de la formación de C++ que imparto de vez en cuando. No están totalmente actualizadas, pero cubren hasta C++ 11, las pequeñas mejoras en C++ 14 no están.
Este documento presenta una introducción a Scala. Scala es un lenguaje de programación funcional y orientado a objetos creado en 2003 por Martin Odersky que compila a la máquina virtual de Java. El documento describe características clave de Scala como su tipado estático, influencias de Java y Haskell, ecosistema y herramientas, y proporciona ejemplos básicos de código Scala.
Scala es un lenguaje que combina la programación orientada a objetos y el paradigma imperativo, con el paradigma funcional. En esta charla nos centraremos primero en ver las características OO de Scala comparándolas con Java y luego veremos algunas de las características "funcionales" del lenguaje.
El documento describe conceptos básicos de Java como la máquina virtual de Java (JVM), programación orientada a objetos, manejo de archivos, applets, threads y más. Explica que la JVM se encuentra en cualquier equipo que navega en Internet y tiene un recolector de basura que libera memoria de forma automática, y que Java permite desarrollar programas multihilo.
1. El documento introduce el lenguaje de programación Java, el cual es orientado a objetos y multiplataforma. 2. Explica las ventajas de Java como su orientación a objetos, simplicidad, portabilidad entre plataformas, robustez y facilidades para programación en red. 3. Cubre conceptos básicos de Java como tipos de datos, declaraciones, expresiones, conversiones de tipos, instrucciones de control e introducción a clases, arreglos, argumentos de programa y manejo de excepciones.
Este documento presenta una introducción a PHP. Brevemente describe la historia de PHP desde su creación en 1995 hasta su versión actual. Explica conceptos básicos como la sintaxis, variables, tipos de datos, arrays, estructuras de control y funciones.
Este documento describe los fundamentos de la programación orientada a objetos en JavaScript, incluyendo el uso de prototipos, clases, herencia y técnicas de reutilización como mixins y traits. Explica que JavaScript usa herencia basada en prototipos donde los objetos heredan propiedades de otros objetos a través de una cadena de prototipos. También cubre cómo crear clases y objetos, y técnicas como mixins y traits para reutilizar código de manera más flexible que la herencia tradicional.
Este documento proporciona una introducción a JavaScript y jQuery. Explica conceptos básicos de JavaScript como tipado débil, tipado dinámico y características del lenguaje. También cubre selectores, manipulación del DOM y manejo de eventos en jQuery.
Este documento proporciona una introducción a Swift, incluyendo lo básico como variables, constantes, tipado, strings y colecciones. También cubre operadores, funciones, control de flujo, clases, closures, playgrounds, Xcode, AutoLayout y la creación de una primera aplicación iOS con Swift. Brevemente menciona temas como Objective-C, CocoaPods, MVC, controladores y Parse.
Este documento proporciona una introducción a Objective-C, incluyendo su sintaxis básica como números, cadenas, condicionales y bucles. También explica conceptos como clases, propiedades, métodos y mensajes. Por último, presenta brevemente patrones como MVC y el uso de tablas y mapas.
Este documento describe la creación y uso de objetos en JavaScript. Explica objetos nativos como String, Math y Array, y sus métodos. También cubre la creación de objetos personalizados mediante literales de objetos, factories y clases simuladas, así como herencia y el uso de namespaces para evitar la contaminación del espacio de nombres global.
Ruby y Java son lenguajes orientados a objetos con características similares como el recolector de basura y herramientas de documentación, pero Ruby es un lenguaje interpretado de tipado dinámico que permite mayor flexibilidad al permitir cambios de tipo en tiempo de ejecución y tratar todo como objetos.
Swift es un nuevo lenguaje de programación seguro, moderno y potente desarrollado por Apple para crear aplicaciones en iOS y OS X. Algunas características clave de Swift incluyen gestión automática de memoria, sintaxis sencilla, tipos y clases mejorados, y compatibilidad con Objective-C. Swift también introduce nuevos conceptos como closures, opciones y genéricos.
Este documento describe el lenguaje de programación Objective-C, usado principalmente para desarrollar aplicaciones para iOS y macOS. Explica que Objective-C es un lenguaje orientado a objetos basado en C, y cubre temas como su sintaxis, tipos básicos, definición de clases, propiedades, constructores, y estructuras de datos como arrays y diccionarios.
Este documento describe los tipos de datos de clases y referencias en Java. Introduce los conceptos de clases, objetos y variables de referencia. Explica cómo se inicializan los atributos de un objeto, cómo se representan los objetos en memoria y las diferencias entre variables primitivas y de referencia. También cubre temas como la copia y comparación de objetos, el recolector de basura y el uso de atributos estáticos para almacenar información de clase.
Este documento explica conceptos básicos de programación orientada a objetos en Java como clases, objetos, encapsulamiento, constructores, métodos, atributos públicos y privados. Define una clase Estudiante con atributos como nombre, apellido y notas, así como métodos para acceder y modificar estos atributos de forma encapsulada.
El documento describe diferentes estructuras de datos en Java como variables, bucles (do-while, while, for), arrays, maps y arrays multidimensionales. Explica cómo funcionan y provee ejemplos de código para ilustrar su uso almacenando y procesando nombres, edades, sueldos y otras variables.
Este documento resume las Jornadas Symfony que tendrán lugar los días 5 y 6 de julio de 2010 en la Universitat Jaume I de Castellón. Incluye información sobre las charlas de Doctrine y Symfony que se presentarán, así como ejemplos prácticos sobre el uso de Doctrine para crear aplicaciones con Symfony.
Este documento describe diferentes componentes gráficos en Java como AWT y Swing. Explica que AWT se basa en el sistema operativo subyacente mientras que Swing es multiplataforma. También describe clases comunes de Swing como JFrame, JLabel, JButton y cómo crear interfaces gráficas básicas con ellos.
Este documento proporciona una introducción a Python. Explica los conceptos básicos de Python como su tipado dinámico y fuerte, y describe las características del lenguaje como las estructuras de control, funciones, estructuras de datos y clases. También cubre temas como módulos, E/S, errores y excepciones. El documento es una guía general para aprender Python.
1) El documento habla sobre la herencia en Java. La herencia permite que una clase herede atributos y métodos de otra clase llamada superclase.
2) Las subclases heredan la funcionalidad de la clase padre y pueden extenderla redefiniendo métodos.
3) Java solo permite herencia simple, es decir, una clase puede heredar de una única superclase.
1) El documento habla sobre estructuras de control en Java como variables, tipos de datos primitivos, operadores aritméticos, relacionales y lógicos, y sentencias condicionales if-else y switch.
2) Explica las reglas para nombrar variables en Java y los 8 tipos de datos primitivos que incluyen enteros, flotantes y caracteres.
3) Proporciona ejemplos de cómo usar sentencias condicionales if-else y switch para tomar decisiones basadas en diferentes condiciones.
La programación orientada a objetos introduce conceptos como objetos, clases, herencia y polimorfismo. Un objeto combina datos (atributos) y comportamiento (métodos). Una clase define el tipo de objeto. La herencia permite que las subclases extiendan y especialicen las superclases. El polimorfismo incluye sobrecarga y sobrescritura de métodos para proporcionar interfaces múltiples. Las clases abstractas definen métodos sin implementarlos, obligando a las subclases a hacerlo.
Este documento presenta conceptos básicos de programación orientada a objetos en Python como clases, objetos, métodos, propiedades, inicializadores de clases e herencia. Explica cómo definir clases y crear objetos, así como el uso del método especial __init__() para inicializar las variables de instancia. También cubre la herencia de clases y cómo crear excepciones propias heredando de la clase base Exception.
Este documento presenta información general sobre un curso de Java, incluyendo los profesores, índice del curso y bibliografía. Luego resume las características principales de Java como lenguaje interpretado, fuertemente tipado y portable. Finalmente, explica conceptos clave como el desarrollo en Java, compilación e interpretación, y comparativa con C++.
El documento introduce JavaScript como un lenguaje de programación dinámico e interpretado que se utiliza principalmente para el desarrollo web. Explica brevemente la historia de JavaScript, sus características como lenguaje débilmente tipado y orientado a objetos, y conceptos fundamentales como variables, tipos de datos, operadores, alcance, coerción y estructuras de control como condicionales y switch.
La programación orientada a objetos en Java define clases que describen objetos y sus propiedades (atributos) y comportamientos (métodos). Se presentan ejemplos de clases como Rectángulo y Persona. La herencia permite que las subclases extiendan las propiedades y comportamientos de las superclases.
Construyendo y publicando nuestra primera app multiplataformaCarlos Alonso Pérez
Review of how fragmentation makes it difficult for developers to create and publish multiplatform applications (mobile & web) and how HTML5 and jQuery Mobile technologies stack can help us build that 'one size fits all' application
Slides from the talk, with the same name I gave on madridrb Ruby local users group in which I try to deeply explain how closures are implemented internally in Ruby
Este documento proporciona una introducción a JavaScript y jQuery. Explica conceptos básicos de JavaScript como tipado débil, tipado dinámico y características del lenguaje. También cubre selectores, manipulación del DOM y manejo de eventos en jQuery.
Este documento proporciona una introducción a Swift, incluyendo lo básico como variables, constantes, tipado, strings y colecciones. También cubre operadores, funciones, control de flujo, clases, closures, playgrounds, Xcode, AutoLayout y la creación de una primera aplicación iOS con Swift. Brevemente menciona temas como Objective-C, CocoaPods, MVC, controladores y Parse.
Este documento proporciona una introducción a Objective-C, incluyendo su sintaxis básica como números, cadenas, condicionales y bucles. También explica conceptos como clases, propiedades, métodos y mensajes. Por último, presenta brevemente patrones como MVC y el uso de tablas y mapas.
Este documento describe la creación y uso de objetos en JavaScript. Explica objetos nativos como String, Math y Array, y sus métodos. También cubre la creación de objetos personalizados mediante literales de objetos, factories y clases simuladas, así como herencia y el uso de namespaces para evitar la contaminación del espacio de nombres global.
Ruby y Java son lenguajes orientados a objetos con características similares como el recolector de basura y herramientas de documentación, pero Ruby es un lenguaje interpretado de tipado dinámico que permite mayor flexibilidad al permitir cambios de tipo en tiempo de ejecución y tratar todo como objetos.
Swift es un nuevo lenguaje de programación seguro, moderno y potente desarrollado por Apple para crear aplicaciones en iOS y OS X. Algunas características clave de Swift incluyen gestión automática de memoria, sintaxis sencilla, tipos y clases mejorados, y compatibilidad con Objective-C. Swift también introduce nuevos conceptos como closures, opciones y genéricos.
Este documento describe el lenguaje de programación Objective-C, usado principalmente para desarrollar aplicaciones para iOS y macOS. Explica que Objective-C es un lenguaje orientado a objetos basado en C, y cubre temas como su sintaxis, tipos básicos, definición de clases, propiedades, constructores, y estructuras de datos como arrays y diccionarios.
Este documento describe los tipos de datos de clases y referencias en Java. Introduce los conceptos de clases, objetos y variables de referencia. Explica cómo se inicializan los atributos de un objeto, cómo se representan los objetos en memoria y las diferencias entre variables primitivas y de referencia. También cubre temas como la copia y comparación de objetos, el recolector de basura y el uso de atributos estáticos para almacenar información de clase.
Este documento explica conceptos básicos de programación orientada a objetos en Java como clases, objetos, encapsulamiento, constructores, métodos, atributos públicos y privados. Define una clase Estudiante con atributos como nombre, apellido y notas, así como métodos para acceder y modificar estos atributos de forma encapsulada.
El documento describe diferentes estructuras de datos en Java como variables, bucles (do-while, while, for), arrays, maps y arrays multidimensionales. Explica cómo funcionan y provee ejemplos de código para ilustrar su uso almacenando y procesando nombres, edades, sueldos y otras variables.
Este documento resume las Jornadas Symfony que tendrán lugar los días 5 y 6 de julio de 2010 en la Universitat Jaume I de Castellón. Incluye información sobre las charlas de Doctrine y Symfony que se presentarán, así como ejemplos prácticos sobre el uso de Doctrine para crear aplicaciones con Symfony.
Este documento describe diferentes componentes gráficos en Java como AWT y Swing. Explica que AWT se basa en el sistema operativo subyacente mientras que Swing es multiplataforma. También describe clases comunes de Swing como JFrame, JLabel, JButton y cómo crear interfaces gráficas básicas con ellos.
Este documento proporciona una introducción a Python. Explica los conceptos básicos de Python como su tipado dinámico y fuerte, y describe las características del lenguaje como las estructuras de control, funciones, estructuras de datos y clases. También cubre temas como módulos, E/S, errores y excepciones. El documento es una guía general para aprender Python.
1) El documento habla sobre la herencia en Java. La herencia permite que una clase herede atributos y métodos de otra clase llamada superclase.
2) Las subclases heredan la funcionalidad de la clase padre y pueden extenderla redefiniendo métodos.
3) Java solo permite herencia simple, es decir, una clase puede heredar de una única superclase.
1) El documento habla sobre estructuras de control en Java como variables, tipos de datos primitivos, operadores aritméticos, relacionales y lógicos, y sentencias condicionales if-else y switch.
2) Explica las reglas para nombrar variables en Java y los 8 tipos de datos primitivos que incluyen enteros, flotantes y caracteres.
3) Proporciona ejemplos de cómo usar sentencias condicionales if-else y switch para tomar decisiones basadas en diferentes condiciones.
La programación orientada a objetos introduce conceptos como objetos, clases, herencia y polimorfismo. Un objeto combina datos (atributos) y comportamiento (métodos). Una clase define el tipo de objeto. La herencia permite que las subclases extiendan y especialicen las superclases. El polimorfismo incluye sobrecarga y sobrescritura de métodos para proporcionar interfaces múltiples. Las clases abstractas definen métodos sin implementarlos, obligando a las subclases a hacerlo.
Este documento presenta conceptos básicos de programación orientada a objetos en Python como clases, objetos, métodos, propiedades, inicializadores de clases e herencia. Explica cómo definir clases y crear objetos, así como el uso del método especial __init__() para inicializar las variables de instancia. También cubre la herencia de clases y cómo crear excepciones propias heredando de la clase base Exception.
Este documento presenta información general sobre un curso de Java, incluyendo los profesores, índice del curso y bibliografía. Luego resume las características principales de Java como lenguaje interpretado, fuertemente tipado y portable. Finalmente, explica conceptos clave como el desarrollo en Java, compilación e interpretación, y comparativa con C++.
El documento introduce JavaScript como un lenguaje de programación dinámico e interpretado que se utiliza principalmente para el desarrollo web. Explica brevemente la historia de JavaScript, sus características como lenguaje débilmente tipado y orientado a objetos, y conceptos fundamentales como variables, tipos de datos, operadores, alcance, coerción y estructuras de control como condicionales y switch.
La programación orientada a objetos en Java define clases que describen objetos y sus propiedades (atributos) y comportamientos (métodos). Se presentan ejemplos de clases como Rectángulo y Persona. La herencia permite que las subclases extiendan las propiedades y comportamientos de las superclases.
Construyendo y publicando nuestra primera app multiplataformaCarlos Alonso Pérez
Review of how fragmentation makes it difficult for developers to create and publish multiplatform applications (mobile & web) and how HTML5 and jQuery Mobile technologies stack can help us build that 'one size fits all' application
Slides from the talk, with the same name I gave on madridrb Ruby local users group in which I try to deeply explain how closures are implemented internally in Ruby
Este documento presenta una introducción al desarrollo de aplicaciones móviles con HTML5. Explica la evolución de la web y cómo ahora es posible crear aplicaciones completas en ella de forma multiplataforma. Luego, analiza el caso práctico de crear una aplicación que funcione en todos los dispositivos para llegar a más público, y propone usar tecnologías como jQuery Mobile para lograrlo de forma sencilla. Finalmente, muestra los primeros pasos para construir una aplicación multiplataforma con esta librería.
Construyendo y publicando nuestra primera app multi plataforma (II)Carlos Alonso Pérez
Review of how fragmentation makes it difficult for developers to create and publish multiplatform applications (mobile & web) and how HTML5 and jQuery Mobile technologies stack can help us build that 'one size fits all' application
How to apply Javascript, JQuery Mobile framework, HTML5 and CSS3 to develop mobile applications that run on all platforms and resolutions. Slides from the Mobile Applications Development Diploma at Colombia
Carlos Alonso Pérez es un desarrollador con experiencia en crear aplicaciones multijugador que permiten partidas no en tiempo real entre dispositivos y plataformas diferentes, integrando servicios de terceros.
1) The document discusses using Swift for big data applications involving collaborative data collection and analysis.
2) It describes a CSVDumpable class that can synchronously dump data to disk in the background for later analysis.
3) Key aspects of performance for big data applications in Swift are discussed, including using NSOperationQueue, release build optimizations, and avoiding string concatenation.
El documento presenta una introducción al curso de desarrollo de aplicaciones móviles en JavaScript. Explica la metodología del curso, que combina explicaciones, laboratorios y ejercicios prácticos. Además, incluye el índice de contenidos a cubrir, como conceptos básicos y avanzados de programación en JavaScript, el uso de JavaScript en navegadores web, DOM, eventos, AJAX y frameworks.
El documento habla sobre iCloud, un servicio gratuito de Apple que permite a los usuarios acceder y sincronizar sus datos en todos sus dispositivos. No requiere un proceso de sincronización explícito, ya que los cambios se actualizan automáticamente a través de las APIs de iCloud. Explica cómo habilitar la sincronización multi-dispositivo en una aplicación iOS usando CoreData e iCloud.
Case Study: Troubleshooting Cassandra performance issues as a developerCarlos Alonso Pérez
This talk will be a step by step walkthrough of a developer troubleshooting a real performance issue we had at MyDrive, from the very first steps diagnosing the symptoms, through looking at metric charts down to CQL queries, the Ruby CQL driver, and Ruby code profiling.
How to use the Javascript WEB API. Programming in web browsers. Slides from the Javascript Module for Mobile Applications Development Diploma in Colombia
This are the slides from the intensive Cassandra Workshop I held in Madrid as a Meetup: http://www.meetup.com/Madrid-Cassandra-Users/events/225944063/ They cover all the Cassandra core concepts, and data modelling basic ones to get up and running with Cassandra.
Sensors (Accelerometer, Magnetometer, Gyroscope, Proximity and Luminosity)Carlos Alonso Pérez
Theory, concepts, internal functions and examples of Apple's iOS builtin sensors Accelerometer, Magnetometer, Gyroscope, Proximity and Luminosity. Slides form MIMO Masters. 2014 Edition
Este documento proporciona una introducción a JavaScript, incluyendo su historia, versiones, tipos de datos, variables, alcance, operadores, manejo de errores y objetos. Explica conceptos clave como case sensitivity, comentarios, literales, identificadores, palabras reservadas, conversión de tipos, void, try/catch/finally y with. También resume brevemente el manejo de HTML DOM, inputs, eventos y objetos en JavaScript.
Este documento describe las características principales del lenguaje C++. Explica las extensiones de C++ respecto a C, como las orientadas y no orientadas a objetos. También describe conceptos clave como la organización de programas, tipos de datos, funciones, clases, herencia y más.
Este documento describe conceptos básicos de programación en Java, incluyendo características del lenguaje como tipos de datos, operadores, arrays, clases, objetos, métodos y constructores. También compara Java con C++ y describe elementos como compilación e interpretación.
Este documento describe las características del lenguaje de programación Java, incluyendo su sintaxis, tipos de datos, clases, objetos, métodos y constructores. Explica las diferencias entre Java y C++ y proporciona ejemplos de código Java para ilustrar los conceptos.
Este documento presenta una introducción a la programación orientada a objetos. Explica conceptos básicos como la creación, declaración e inicialización de objetos mediante el uso de clases, constructores, métodos y atributos. También describe convenciones como los nombres de clases y métodos, y los modificadores de acceso que controlan la visibilidad de los miembros de una clase.
Este documento describe objetos en JavaScript. Los objetos son colecciones de propiedades nombradas y sus valores. Se pueden crear objetos literalmente o usando el operador new. Las propiedades de un objeto se pueden acceder y modificar usando notación de punto o corchetes. Los objetos heredan propiedades y métodos de la clase Object.
Java es un lenguaje de programación orientado a objetos desarrollado por Sun Microsystems en los años 90. Se compila en bytecode que es interpretado por la máquina virtual Java (JVM) para su ejecución. El documento explica los conceptos básicos de Java como variables, tipos de datos, declaraciones de control e introduce el funcionamiento de un compilador Java.
El documento describe un taller sobre análisis de binarios creados en GoLang. Explica quiénes son los presentadores, por qué es importante aprender sobre este nuevo lenguaje, las características de GoLang, ejemplos de malware creados en GoLang, y el proceso de generación y análisis de binarios de GoLang, incluyendo cómo recuperar los nombres de funciones y cadenas de caracteres en binarios strippeados. El taller concluye con un reto práctico de obtener un flag de un binario de muestra.
El documento proporciona una introducción a los objetos en JavaScript. Explica que los objetos son conjuntos de propiedades y métodos, y que pueden contener valores primitivos u otros objetos. También describe el papel crucial del receptor "this" y cómo su valor depende de cómo se invoca la función. Finalmente, introduce los conceptos de "arguments" y cómo manipular el contexto a través de los métodos "call" y "apply".
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casaMicael Gallego
Introducción a TypeScript desde el punto de vista de un desarrollador Java. TS en un lenguaje que transpila a JavaScript y se puede usar tanto para el desarrollo web front-end como para el backend con Node.js. Angular 2, el framework de moda, recomienda su uso.
Este documento presenta información general sobre un curso de Java, incluyendo los profesores, índice del curso y bibliografía. Luego resume las características principales de Java como lenguaje interpretado, fuertemente tipado y portable. Finalmente, explica conceptos clave como el desarrollo en Java, compilación e interpretación, y comparativa con C++.
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript David Ballén
El documento presenta una agenda para una charla sobre JavaScript que incluye: 1) las buenas características de JavaScript como funciones de primera clase y patrones como cadena, callback, observable y delegación; 2) programación orientada a objetos en JavaScript usando prototipos; y 3) patrones de diseño como MVC, MVVM y MV*.
La programación orientada a objetos (POO) representa el mundo real mediante objetos y sus interacciones. Una clase define los atributos y métodos comunes a todos los objetos de un tipo dado. Las instancias de clase son objetos individuales que pueden heredar atributos de clases padre. La herencia permite extender y reutilizar código. El encapsulamiento oculta las implementaciones internas de un objeto. El polimorfismo permite que métodos con el mismo nombre tengan comportamientos diferentes dependiendo del objeto.
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011Jano González
Este documento habla sobre JRuby, una implementación de Ruby que corre sobre la máquina virtual de Java. JRuby combina las ventajas de Ruby como lenguaje dinámico y orientado a objetos con las ventajas de Java como portabilidad, escalabilidad y soporte empresarial. El autor argumenta que JRuby puede usarse para simplificar aplicaciones Java complejas y aprovechar librerías de Java desde Ruby.
Este documento presenta el cronograma y agenda de un curso básico de C# impartido por Oscar Ortiz Pinzon de Microsoft Student Partners en Bogotá, Colombia. El cronograma incluye 7 sesiones entre el 7 de marzo y el 9 de mayo para cubrir temas como .NET Framework, C#, programación básica, orientada a objetos, estructuras de datos, aplicaciones Windows, bases de datos, y ASP.NET. La agenda para la primera sesión incluye introducciones a .NET, C# y conceptos básicos como variables, tipos de datos, entradas/sal
Este documento resume React, una librería Javascript para la creación de interfaces de usuario. React permite definir componentes reutilizables que representan parte de la interfaz y se actualizan automáticamente cuando cambian los datos. Grandes empresas como Facebook, Netflix e Instagram usan React internamente. React ofrece ventajas como rendimiento, facilidad de composición de componentes y declaratividad.
Este documento presenta un cronograma de actividades para un curso básico de C# impartido por Oscar Ortiz Pinzon de Microsoft Student Partners en Bogotá, Colombia. El cronograma incluye varios talleres sobre temas como introducción a .NET Framework, programación básica y orientada a objetos usando C#, estructuras de datos, aplicaciones Windows, bases de datos y ASP.NET. El documento también proporciona información sobre reglas del curso y recursos adicionales para los estudiantes.
Javascript: Particularidades del Lenguaje, DOM, Eventos y AJAXIrontec
Este documento describe las características del lenguaje Javascript. Explica cómo incluir código Javascript en documentos HTML, los tipos de datos soportados como números, cadenas, arrays y objetos, y que Javascript es un lenguaje de tipado débil. También describe los ámbitos de ejecución global y de función, las referencias, la orientación a objetos en Javascript y el modelo de documentos.
Este documento describe las características principales del sistema experto CLIPS. CLIPS es una herramienta que provee un entorno de desarrollo para la producción y ejecución de sistemas expertos creada por la NASA en 1984. CLIPS soporta programación lógica, imperativa y orientada a objetos. Permite representar conocimiento a través de hechos, reglas, módulos, funciones y objetos. Proporciona un ambiente de desarrollo interactivo para la creación de sistemas expertos.
1. Introduccion a las excavaciones subterraneas (1).pdfraulnilton2018
Cuando las excavaciones subterráneas son desarrolladas de manera artesanal, se conceptúa a la excavación como el “ que es una labor efectuada con la mínima sección posible de excavación, para permitir el tránsito del hombre o de
cémilas para realizar la extracción del material desde el
frontón hasta la superficie
Cuando las excavaciones se ejecutan controlando la sección de excavación, de manera que se disturbe lo menos posible la
roca circundante considerando la vida útil que se debe dar a la roca, es cuando aparece el
concepto de “ que abarca,
globalmente, al proceso de excavación, control de la periferia, sostenimiento, revestimiento y consolidación de la excavación
Los puentes son estructuras esenciales en la infraestructura de transporte, permitiendo la conexión entre diferentes
puntos geográficos y facilitando el flujo de bienes y personas.
Equipo 4. Mezclado de Polímeros quimica de polimeros.pptxangiepalacios6170
Presentacion de mezclado de polimeros, de la materia de Quimica de Polímeros ultima unidad. Se describe la definición y los tipos de mezclado asi como los aditivos usados para mejorar las propiedades de las mezclas de polimeros
3. Antes de empezar...
Presentaciones
• Nombre
• Edad
• Estudios
• ¿A qué te dedicas?
• ¿Por qué estás aquí?
• ¿Qué esperas de este curso?
• ¿Qué experiencia tienes con JS, HTML y CSS?
7. Índice de contenidos
• Introducción y entorno de desarrollo
• Conceptos de programación básicos
• Conceptos de programación avanzados
8. Introducción
• ¿Qué sabemos de Javascript?
– Historia
– ¿Es un lenguaje de programación? ¿de scripting? ¿un subconjunto de Java?
– ¿Estructurado u OO?
– ¿Compilado o interpretado?
– ¿Imperativo, funcional o híbrido?
– ¿Fuerte o débilmente tipado?
– ¿Dinámico?
– ¿Cuáles son sus entornos de ejecución?
– ¿Sencillo o difícil?
– ¿Potente?
– ¿Tiene errores?
– ¿Tiene buena o mala reputación?
11. Re-introducción
• ¿Quién es Javascript?
– Sintaxis C
– Completamente Orientado a Objetos
– Interpretado
– Funcional Híbrido
– Débilmente tipado
– Dinámico
– Fácil de aprender, difícil de dominar
– Muy potente
– Sí, tiene errores
18. Estructura léxica
• Juego de caracteres:
Unicode case
sensitive
• Comentarios C
• Literales
• Sentencias
/*
* Literales
*/
12
1.2
“Hello World!”
/*
* Sentencias
*/
var a = 1;
19. Estructura léxica
• Identificadores
– i, my_variable, _dummy, $str, sí, π
• Palabras reservadas
– break delete case do catch else continue false debugger finally default
for function return typeof if switch var in this void instanceof throw
while new true with null try
20. Estructura léxica
; es opcional!!
/*
* Comportamiento esperado
*/
1 + 2
“hola mundo!”
/*
* Comportamiento inesperado!
*/
var f = 2
1 + f
(2 + 3) * 2
25. undefined y null
• undefined => no inicializado
• null => no hay objeto o valor
26. Booleanos
• true y false
• Tabla de verdad:
– false => undefined, null, 0, -0, NaN y “”
– true => Todo lo demás
27. Detectando tipos
Operador typeof
/*
* Detección de tipos
*/
typeof 2
typeof 2.33
typeof “Hola Mundo!”
typeof undefined
typeof true
typeof null // Es un objeto!!
28. Tipos proporcionados por JS
• Fechas y horas
• El objeto global
• Wrapper objects
• Conversión de tipos (Casting)
29. Fechas y horas
• Clase Date
• Documentación:
– https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date
/* Ejemplo uso de fechas */
var now = new Date();
var future = new Date(now.getTime() + 300000);
future - now;
30. Fechas y horas: Ejercicio!
• Calcular el número de días que han pasado desde
mi nacimiento el 19 - Marzo - 1985.
• Documentación:
– https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round
31. Fechas y horas: Ejercicio!
• Calcular el número de días que han pasado desde
mi nacimiento el 19 - Marzo - 1985.
• Documentación:
– https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date
/*
* Solución: 10700.6108…
*/
var now = new Date();
var carlos = new Date(1985, 2, 19);
var millis = now - carlos;
millis / 1000 / 60 / 60 / 24;
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round
32. El objeto global
• Creado al inicializar el intérprete JS
• Es nuestro contexto de ejecución (this)
• Proporciona métodos
– isNaN(), isFinite(), ...
/*
* El objeto global nos permite usar sus métodos
* directamente, sin usar this
*/
isNaN(“hola”);
this.isNaN(“hola”);
33. El objeto global
• Proporciona Constructores:
– Date, Object, ...
• Almacena nuestras variables globales
/*
* Constructores
*/
var now = new this.Date();
now;
/*
* Almacena variables
* globales
*/
var now = new Date();
this.now;
34. Wrapper Objects
/*
* Ejemplo 1
*/
var s = “Hola Mundo!”;
console.log(typeof s);
s.charAt(0);
/*
* Ejemplo 2
*/
var s = “Hola Mundo!”;
s.my_dummy_var = 56;
s.my_dummy_var;
Conversión automática entre tipos primitivos
y su correspondiente ‘wrapper object’
35. Wrapper Objects
/*
* Ejemplo 1
*/
var s = new String(“Hola!”);
console.log(typeof s);
s.my_dummy_var = 56;
s.my_dummy_var;
/*
* Ejemplo 2
*/
var n = new Number(5);
console.log(5 == n);
5 === n;
Conversión automática entre ‘wrapper
objects’ y su tipo primitivo
39. Variables: Declaración
/*
* Declaración e inicialización
*/
var i; // Declaración simple
var i, j, k; // Declaración múltiple
var i = 0; // Inicialización simple
var i = 0, j = 1, k = 2; // Inicialización múltiple
var a, b = “hola”; // Declaración + inicialización
40. Variables: Redeclaración y omisión
/*
* Redeclaración
*/
var a = 1;
var a = 2;
a; // 2
/*
* Redeclaración
*/
var a = 1;
var a;
a; // 1
/*
* Omisión
*/
a = 1;
a // 1
41. Variables: Scope
var scope = “global”;
function checkscope() {
scope = “local”;
}
checkscope();
scope; // local
• Global: Variables
disponibles en cualquier
sección del código.
var scope = “global”;
function checkscope() {
var scope = “local”;
}
checkscope();
scope; // global
• Local: Variables definidas dentro
de una función.
• Eclipsan variables globales con
el mismo nombre.
42. Variables: Scope
El problema de definir variables omitiendo ‘var’.
scope = “global”;
function checkscope() {
scope = “local”;
localvar = “local”;
}
checkscope();
scope; // local => ¡¡Ha sido modificada!!
localvar; // local => ¡¡Está definida!!
43. Variables: Scope
Función: Característica de JS.
La variable está disponible en
todo el cuerpo de la función.
No sólo en el bloque donde se
define.
function checkscope() {
if (true) {
var j = 1;
if (true) {
var k = 2;
}
}
console.log(j); // 1
console.log(k); // 2
}
checkscope();
44. Variables: Scope
Variable hoisting: Otra característica de JS. ¡¡Las variables
definidas en una función están disponibles antes incluso
de ser definidas!!
function checkscope() {
console.log(scope); // undefined
var scope = “local”;
console.log(scope); // local
}
checkscope();
45. Objetos
• Tipo de dato fundamental de JS
• Colección no ordenada de propiedades
con nombre y valor
• Dinámicos
46. Objetos: El ‘prototype’
• Todas las clases JS tienen un prototype asociado que
define sus atributos y métodos.
• Todos los objetos de una clase tendrán todos los
atributos y métodos de su prototype y pueden,
además, tener otros atributos y métodos propios.
47. Objetos: Creación
• Literal
var empty = {};
var point = {x:1, y:3};
var book = {
title: "The title",
author: {
name: "author name",
surname: "author surname"
}};
• Operador ‘new’
var o = new Object();
var d = new Date();
48. Objetos: Propiedades
• Tienen un nombre, un valor y atributos.
• Son accesibles con notación de punto (.) o
corchetes ([])
• Se pueden añadir o eliminar en tiempo de
ejecución.
• Pueden ser propias o heredadas.
49. Objetos: Propiedades
• Añadiendo propiedades
var o = {};
o.first_prop = “first”;
o[“second_prop”] = “second”;
• Accediendo a propiedades
o[“first_prop”]; // first
o.second_prop; // second
51. Propiedades: Ejercicio!
• Crear una función que reciba tres parámetros, un objeto, el nombre
de una propiedad y un valor.
• La función debe comprobar si el objeto tiene una propiedad con ese
nombre y si la tiene retornar el valor y sino definirla, asignar el valor
recibido en el tercer parámetro y retornarlo.
52. Propiedades: Ejercicio!
• Crear una función que reciba tres parámetros, un objeto, el nombre
de una propiedad y un valor.
• La función debe comprobar si el objeto tiene una propiedad con ese
nombre y si la tiene retornar el valor y sino definirla, asignar el valor
recibido en el tercer parámetro y retornarlo.
function f(obj, property, value)
{
if (!obj[property]) {
obj[property] = value;
}
return obj[property];
}
53. Propiedades: Detección y
enumeración
• Operador ‘in’:
var o = { x: 1 };
“x” in o; // true
“y” in o; // false
“toString” in o; // true
• Bucle for/in:
var o = { x: 1, y: 2, z: 3 };
for(p in o) {
console.log(p);
console.log(o[p]);
}
55. Propiedades: Ejercicio!
Reescribir la función del ejercicio anterior utilizando alguno de los
enumeradores vistos.
function f(obj, property, value)
{
if (!(property in obj)) {
obj[property] = value;
}
return obj[property];
}
56. Arrays
• Creación
var empty = [];
var fill = [1, 2, 3, 4];
var empty2 = new Array();
var withSize = new Array(10);
var fill2 = new Array(1, 2, 3, 4);
• Pueden contener
cualquier tipo de objeto
var misc = [1, “hola”, true, , {}, []];
var misc2 = new Array(1, “hola”, true, {}, []);
57. Arrays
• Crecen dinámicamente
var a = [];
a[3] = “hola”;
a;
• Son objetos, por tanto
admiten propiedades!!
var a = [];
a.hola = “hola”;
a.hola;
58. Funciones
• Son tipos primitivos:
• Se pueden usar como variables
• Se pueden pasar como argumentos a otras funciones
• Pueden ser el retorno de otra función
• Se les pueden asignar propiedades e incluso invocar
métodos en ellas.
59. Funciones
Definición // Como expresión
function f(x) {
return x + 1;
}
// Como sentencia
var f = function(x) {
return x + 1;
}
// Anidada
function hypotenuse(a, b) {
function square(x) { return x * x; };
return Math.sqrt(square(a) + square(b));
}
60. Funciones: Scope léxico
Tienen acceso a todas las variables
definidas en el bloque donde son definidas.
function a(x) {
var y = “y”;
function b() {
console.log(x + “ “ + y + “ “ + z); // x y z
}
var z = “z”;
b();
}
a(“x”);
61. Métodos
• Son funciones que son propiedades de
algún objeto.
• Se ejecutan en el contexto del objeto.
var o = {
m: function() {
console.log(this === o);
}
}
62. Métodos con funciones anidadas
Fuente común de errores debido al contexto (this).
var o = {
m: function() {
console.log(this === o); // true
function f() {
console.log(this === o); // false
console.log(this); // Es el objeto global!!
}
f();
}
}
o.m();
63. Métodos con funciones anidadas
La solución es el uso del scope léxico
var o = {
m: function() {
var self = this;
function f() {
console.log(self === o); // true
}
f();
}
}
o.m();
65. Funciones: Ejercicio!
¿Los argumentos en JS se pasan por valor o por referencia?
¿Y sin son objetos?
/*
* Solución
*/
function f (value, object) {
value ++;
object.x ++;
}
var o = { x: 1 };
var v = 1;
f(v, o);
console.log(o);
console.log(v);
66. Funciones: Argumentos
No se comprueba ni el tipo ni el número
function a(x, y) {
console.log(“Función ejecutada correctamente”);
}
a(1); // Con un argumento menos
a(1, 2, 3); // Con un argumento mas
68. Funciones: Argumentos
• Argumentos extra: ‘varargs functions’.
• JS proporciona a todas las funciones un array ‘arguments’
• Nos permite comprobar si una función se ha invocado con el
número correcto de argumentos.
• Nos permite definir funciones que trabajen sobre un número
variable de argumentos.
function f(x, y, z) {
if (arguments.length != 3) {
throw new Error(“Wrong arguments number”);
}
// ...
}
69. Funciones: Ejercicio!
• Definir una función que retorne el número máximo de todos los que recibe
como argumentos.
• La función no debe definir ningún argumento:
• function max() { ... }
• Pista: Podéis usar Number.INFINITY y Number.NEGATIVE_INFINITY
70. Funciones: Ejercicio!
• Definir una función que retorne el número máximo de todos los que recibe
como argumentos.
• La función no debe definir ningún argumento:
• function max() { ... }
• Pista: Podéis usar Number.INFINITY y Number.NEGATIVE_INFINITY
function max(/* ... */) {
var max = Number.NEGATIVE_INFINITY;
for (var i = 0 ; i < arguments.length ; ++i) {
if (arguments[i] > max) {
max = arguments[i]
}
}
return max;
}
console.log(max());
console.log(max(1, 2, 1000, 3));
71. Funciones: Propiedades
Las funciones son objetos, por tanto pueden
tener propiedades.
function uniqueValue() {
return uniqueValue.c ++;
}
uniqueValue.c = 1;
console.log(uniqueValue());
console.log(uniqueValue());
console.log(uniqueValue());
72. Clases
Conjunto de
objetos que
heredan
propiedades del
mismo prototipo.
function range(from, to) {
var r = Object.create(range.prototype);
r.from = from;
r.to = to;
return r;
}
range.prototype = {
includes: function(x) {
return this.from <= x && x <= this.to;
},
toString: function() {
return “(“ + this.from + “..” + this.to + “)”;
}
};
var r = range(1, 3);
console.log(r.includes(2));
r.toString();
73. Clases: Constructores
En JS se define una
clase mediante una
función constructor y
su prototype.
function Range(from, to) {
this.from = from;
this.to = to;
}
Range.prototype = {
includes: function(x) {
return this.from <= x && x <= this.to;
},
toString: function() {
return “(“ + this.from + “..” + this.to + “)”;
}
};
var r = new Range(1, 3);
console.log(r.includes(2));
r.toString();
74. Clases: operador ‘new’
• Convierte una función simple en un constructor:
• El intérprete creará un nuevo objeto.
• Lo convertirá en el contexto actual (this).
• Le asignará la propiedad prototype al prototype de la
función
• Lo usará como retorno de la función (constructor).
75. Operador ‘new’: Ejercicio!
• ¿Qué ocurriría si, por error, invocamos un constructor sin el
operador new?
• ¿Qué objeto se creará?
• ¿Qué efecto tendrá el código del constructor?
• ¿Cuál será el valor retornado?
76. Operador ‘new’: Ejercicio!
• ¿Qué ocurriría si, por error, invocamos un constructor sin el
operador new?
• ¿Qué objeto se creará?
• ¿Qué efecto tendrá el código del constructor?
• ¿Cuál será el valor retornado?
• No se creará ningún objeto nuevo.
• El contexto desde el que se invoque la función sufrirá las
modificaciones resultantes del código del constructor.
• El valor de retorno será undefined.
77. Clases: Herencia
• Heredar en JS significa que el prototipo de la
función constructor de la clase hija es un
objeto de la clase padre.
• La función constructor de la clase padre tiene
como prototype un objeto de su clase padre.
• La función constructor de Object es la única
del lenguaje cuyo prototype es null.
• Así se constituye la cadena de prototipos
(prototype chain)
Object()
proto = null
Parent()
proto = Object
Child()
proto = Parent
78. Clases: Herencia
function Parent() {
}
Parent.prototype = {
sayHello: function() {
console.log("Hello");
}
};
function Child() {
}
Child.prototype = new Parent();
Child.prototype.sayGoodbye = function() {
console.log("Goodbye");
};
var child = new Child();
child.sayHello();
child.sayGoodbye();
child.toString();
Object()
proto = null
Parent()
proto = Object
Child()
proto = Parent
79. Detectando clases
• Mediante el prototype: Un objeto es de una clase si su prototype y el de
su constructor son el mismo.
• Los objetos de una clase no tienen propiedad prototype definida. La
propiedad prototype es de la función constructora.
// En el ejemplo anterior...
var child = new Child();
child.prototype; // undefined!!
var child = new Child();
Object.getPrototypeOf(child);
// Retorna el objeto Parent que asignamos como
// prototype a la función Child y extendimos
80. Detectando clases: Ejercicio!
Escribir una función que reciba dos argumentos, un objeto y un
constructor e indique si el objeto es de ese tipo o de algún ancestro de
ese tipo.
81. Detectando clases: Ejercicio!
Escribir una función que reciba dos argumentos, un objeto y un
constructor e indique si el objeto es de ese tipo o de algún ancestro de
ese tipo. function isKindOfClass(object, klazz) {
var ret = false;
while (!ret && object) {
ret = Object.getPrototypeOf(object) === klazz.prototype;
object = Object.getPrototypeOf(object);
}
return ret;
}
function Test() {
}
var t = new Test();
isKindOfClass(t, Test); // true
isKindOfClass(t, Object); // true
isKindOfClass(t, String); // false
82. Detectando clases
Operador instanceof: Detecta si un objeto
es instancia de una clase o ancestro.
// En el ejemplo anterior...
var child = new Child();
child instanceOf Parent; // true
child instanceOf Object; // true
child instanceOf String; // false
83. Detectando clases
Propiedad constructor: Propiedad que tienen todos los
prototipos, aunque JS no siempre puede asignarla.
Parent()
prototype
Constructor Prototype
constructor
sayHello:
...
Instancias
new
Parent()
hereda
hereda
new
Parent()
84. Detectando clases
JS no puede asignarla
automáticamente.
function Parent() {
}
Parent.prototype = {
constructor: Parent,
sayHello: function() {
console.log("Hello");
}
};
JS sí puede asignarla
automáticamente.
function Parent() {
}
Parent.prototype.sayHello = function() {
console.log("Hello");
};
(new Parent()).constructor;
85. Modificación dinámica de clases
JS permite modificar los objetos prototype de cualquier constructor
en tiempo de ejecución y la modificación afectará incluso a los
objetos ya existentes.
function Parent() {
}
Parent.prototype = {
sayHello: function() {
console.log("Hello");
}
};
var p = new Parent();
Parent.prototype.sayHi = function() {
console.log(“Hi”);
};
p.sayHi();
86. Modificación dinámica de clases: Ejercicio!
• Modificar la clase Number y añadirle un método que nos
indique si su valor es par o no.
• Mirad la documentación de Number y su prototype
87. Modificación dinámica de clases: Ejercicio!
• Modificar la clase Number y añadirle un método que nos
indique si su valor es par o no.
• Mirad la documentación de Number y su prototype
/*
* Solución
*/
Number.prototype.even = function() {
return this.valueOf() % 2 == 0;
}
var n = 4;
n.even();
88. Métodos estáticos
No existen en JS, pero es tan flexible que
podemos simularlos como métodos de la
función constructora.
Parent.buildNew = function() {
return new Parent();
}
var p = Parent.buildNew();
90. Scope Chain: Conceptos
• Scope: Conjunto de líneas de código en las que una
variable está definida. Puede ser:
– Global: Variables globales, que están definidas en
todo el programa.
– Local: Variables definidas en la función que son
declaradas y en las funciones anidadas dentro de esa
función.
91. Scope Chain
• JS almacena las variables con scope local para cada fragmento
de código como propiedades de un objeto interno.
• El scope chain es una cadena (lista) de objetos que definen las
variables que están en scope.
• Cada fragmento de código tiene un scope chain asociado.
• Cuando JS necesita buscar una variable recorre el scope chain
de forma ordenada hasta que encuentra algún objeto de la
cadena que define la variable o la cadena termina y lanzaría un
ReferenceError.
• Cuando una función es invocada, un nuevo objeto se añade al
scope chain con las variables locales de la función.
92. Scope Chain
var a = 1;
function f(c) {
var b = 2;
// Scope chain 2
}
// Scope chain 1
f(3);
Ejemplo:
{ a: 1,
f: function() }
Scope Chain 1
{ a: 1,
f: function() }
{ c: 3,
b: 2 }
Scope Chain 2
El proceso de resolución de variables sigue
la cadena en el sentido de las flechas.
93. Scope Chain
var a = 1;
function f(c) {
var b = 2;
function s(d) {
// Scope chain(i)
return b + c;
}
return s(4);
}
for (var i = 0 ; i < 3 ; ++i) {
f(i);
}
Ejemplo con funciones anidadas:
{ a: 1,
f: function(),
i: i }
{ c: i,
b: 2,
s: func }
Scope Chain(i)
{ d: 4 }
94. Scope chain: Ejercicio!
var a = 1;
function f(c) {
var b = 2;
function s(d) {
// Scope chain(i, j)
return b + c + d;
}
return s(j);
}
for (var i = 0 ; i < 3 ; ++i) {
for (var j = 0 ; j < 3 ; ++j) {
f(i);
}
}
• Dibujar el Scope Chain que existirá en el punto
del comentario.
• Recordad:
• Que ese Scope Chain dependerá de las
variables i y j.
• Que cada vez que una función es
invocada, sus funciones anidadas son
definidas nuevamente
• Que solo se añade un nuevo objeto al
Scope Chain cuando ocurre una
invocación de una función, pero el estado
del resto de objetos del Scope Chain
puede variar en cualquier momento
(nuevas variables o cambio de valor de
variables ya existentes.)
95. Scope chain: Solución!
{ a: 1,
f: function(),
i: i,
j: j }
{ c: i,
b: 2,
s: func }
Scope Chain(i, j)
{ d: j }
var a = 1;
function f(c) {
var b = 2;
function s(d) {
// Scope chain(i, j)
return b + c + d;
}
return s(j);
}
for (var i = 0 ; i < 3 ; ++i) {
for (var j = 0 ; j < 3 ; ++j) {
f(i);
}
}
¿Dudas? ¿Preguntas? ¿Repetimos?
96. Closures
• JS usa Scope Léxico, es decir, las funciones son
ejecutadas usando el scope existente cuando fueron
definidas, no cuando son invocadas.
• Para implementar Scope Léxico, cada función guarda
internamente el código a ejecutar y una copia del scope
chain existente cuando se define.
• Objeto función + Scope Chain = Closure
97. Closures
• Mismo Scope Chain
var scope = “global scope”;
function checkscope() {
var scope = “local scope”;
function f() {
return scope;
}
return f();
}
checkscope(); // “local scope”
• Diferente Scope Chain
var scope = “global scope”;
function checkscope() {
var scope = “local scope”;
function f() {
return scope;
}
return f;
}
a = checkscope();
a(); // “local scope”
Sorprendidos, ¿verdad?
100. Closures: Private properties
Un posible uso de las closures es definir
propiedades privadas en objetos.
function Test() {
var my_private = “private”;
this.read_private_var = function() {
return my_private;
}
}
var t = new Test();
t.my_private; // undefined
t.read_private_var(); // “private”
101. Closures: Ejercicio!
• Definir una clase Counter que tenga únicamente dos
métodos públicos y ninguna propiedad:
• count(): Devuelve el número de llamadas recibidas a esta
función.
• reset(): Pone a 0 el contador
102. Closures: Ejercicio!
• Definir una clase Counter que tenga únicamente dos
métodos públicos y ninguna propiedad:
• count(): Devuelve el número de llamadas recibidas a esta
función.
• reset(): Pone a 0 el contador function Counter() {
var counter = 0;
this.count = function() {
counter ++;
return counter;
};
this.reset = function() {
counter = 0;
};
}
103. Subclases
• Hasta ahora, cuando
necesitamos extender
una clase, simplemente
encadenamos sus
prototipos.
• ¿Qué ocurre cuando
necesitamos inicializar el
padre?
function Parent() {
this.initialized = true;
}
Parent.prototype = {
initialized: false,
sayHello: function() {
if (this.initialized) {
console.log("Hello");
}
}
};
function Child() {
}
Child.prototype = new Parent();
Child.prototype.sayGoodbye = function() {
console.log("Goodbye");
};
var c = new Child();
child.sayHello();
104. Subclases: funciones call y apply
• call y apply son métodos de las funciones que nos
permiten invocarlas indirectamente, ¡como si fueran
métodos de otros objetos!.
• Se diferencian en la forma de recibir los argumentos.
var num = { value: 1 };
function sum(value) {
return this.value + value;
}
console.log(sum.apply(num, [1]));
console.log(sum.call(num, 2));
105. Subclases
La solución es ‘aplicar’ el constructor del
padre a nuestro contexto.
function Child() {
Parent.apply(this, arguments);
}
106. Subclases: Ejercicio!
En el código de ejemplo,
¿cómo haríais para que
la llamada a sayHello en
el hijo ejecute también
sayHello en el padre?
function Parent() {
}
Parent.prototype = {
sayHello: function() {
console.log("Hello");
}
};
function Child() {
}
Child.prototype = new Parent();
Child.prototype.sayHello = function() {
console.log(" from child");
};
var c = new Child();
child.sayHello();
107. Subclases: Solución!
Igual que invocamos al constructor de la función
padre con apply, hacemos lo mismo con la función
sayHello, referenciándola a través de su prototype.
Child.prototype.sayHello = function() {
Parent.prototype.sayHello.apply(this, arguments);
console.log(" from child");
};
108. Clases Abstractas function Parent() {
}
Parent.prototype = {
sayHello: function() {
throw new Error(“Abstract method!”);
}
};
function Child() {
}
Child.prototype = new Parent();
Child.prototype.sayHello = function() {
console.log("Hello");
};
var c = new Child();
child.sayHello();
109. Comparación de objetos
• Igualdad (==). True si son…
• …cadenas idénticas
• …equivalentes numéricamente
• …el mismo objeto
• …valores booleanos idénticos
• …expresiones de distintos
tipos, pero pueden reducirse a
alguno de estos casos
anteriores
“abc” == “abc”;
2 + 3 == 5;
var a = {};
a == a;
true == !false
new Number(3) == 3
110. Comparación de objetos
• Identidad (===). True si son…
• …cadenas idénticas
• …equivalentes numéricamente
• …el mismo objeto
• …valores booleanos idénticos
“abc” === “abc”;
2 + 3 === 5;
var a = {};
a === a;
true === !false
Mismas reglas que en el caso de la igualdad, excepto que
no se hace conversión de tipos
111. Comparación de objetos: Ejercicio!
• new Number(3) == new Number(3) // False!
• ¿Cómo podemos entonces comparar el valor de dos objetos
Number? Implementar una solución
• Pista: En otros lenguajes como Java, todas las clases definen un
método equals() para comparar, en vez de ==.
112. Comparación de objetos: Ejercicio!
• new Number(3) == new Number(3) // False!
• ¿Cómo podemos entonces comparar el valor de dos objetos
Number? Implementar una solución
• Pista: En otros lenguajes como Java, todas las clases definen un
método equals() para comparar, en vez de ==.
Number.prototype.equals = function(obj) {
if (!obj instanceof Number) {
return false;
}
return this.valueOf() == obj.valueOf();
};
(new Number(3)).equals(new Number(3));
113. Módulos
• Necesitamos definir módulos si queremos:
• Mantener el código organizado.
• Poder mantenerlo.
• Reutilizarlo
• ...
• Pero JS no proporciona una forma estándar, por tanto tenemos
que diseñar nuestra propia manera de hacerlo.
• Objetivo: Definir un módulo que se incluya en otros programas
JS y no altere el entorno.
• Minimizar el número de variables globales definidas.
114. Módulos
Paso 1: Utilizar un solo objeto como namespace
/*
* Definición
*/
var collections = {};
collections.Set = function() {
//Constructor
};
collections.Set.prototype ...
collections.OrderedMap = function() {
//Constructor
}
collections.OrderedMap.prototype ...
/*
* Uso
*/
var s = new collections.Set(...);
// pseudo-import
var Set = collections.Set;
var s2 = new Set(...);
115. Módulos
Paso 2: Utilizar funciones
como namespace privado
/*
* Definición
*/
var collections = {};
(function(){
function Set() {
//Constructor
};
Set.prototype ...
function OrderedMap() {
//Constructor
}
OrderedMap.prototype ...
var api_private_var;
function api_private_func(){};
collections.Set = Set;
collections.OrderedMap = OrderedMap;
})();
116. Módulos
Paso 3: Separar cada clase en un archivo
/*
* collections/set.js
*/
if (!collections) {
collections = {};
}
(function() {
function Set() {
//Constructor
};
Set.prototype ...
var set_private_var;
collections.Set = Set;
})();
/*
* collections/ordered_map.js
*/
var collections = collections || {};
(function() {
function OrderedMap() {
//Constructor
}
OrderedMap.prototype ...
var orderedMap_private_var;
collections.OrderedMap = OrderedMap;
})();
117. Módulos: Ejercicio!
• Escribir el contador con count()
y reset() como componente de
un módulo llamado utils.
• Nota: El constructor no
debe contener código.
118. Módulos: Ejercicio!
• Escribir el contador con count()
y reset() como componente de
un módulo llamado utils.
• Nota: El constructor no
debe contener código.
/*
* utils/counter.js
*/
var utils;
if (!utils) {
utils = {};
}
(function() {
function Counter() {
//Constructor
}
var value = 0;
Counter.prototype.count = function() {
value ++;
return value;
};
Counter.prototype.reset = function() {
value = 0;
};
utils.Counter = Counter;
})();
119. Modo Strict
• Modo de operación de JS que restringe algunas
acciones y lanza más errores
• Detecta errores de código comunes y lanza errores.
• Prohibe o lanza errores cuando se realizan acciones
potencialmente peligrosas
• Deshabilita características no recomendadas.
120. Modo Strict: Activación
<script type=“text/javascript”>
“use strict”;
</script>
function strict_func(){
"use strict";
// ...
}
• Para todo el script
• Sólo una función
// Código no strict
(function(){
"use strict";
// Código strict...
})();
// Código no strict
• Módulo
121. Modo Strict: Variables y propiedades
var myvar = 1;
…
myvr = 2; // ReferenceError!
• Prohibe declarar variables sin la palabra reservada var.
var o = { a: 1, a: 2 }; // SyntaxError
• Prohibe declarar dos propiedades con el mismo nombre.
122. Modo Strict: Funciones
function f() {
arguments = ‘abc’; // SyntaxError
}
• Prohibe sobreescribir el array arguments
function f(arg, arg) {
// SyntaxError
}
• Prohibe nombrar dos argumentos de una función iguales
123. Modo Strict: Más información
https://developer.mozilla.org/en-US/docs/Web/JavaScript/
Reference/Functions_and_function_scope/Strict_mode
124. Preguntas de entrevistas
• ¿Cuál es el motivo de rodear todo el código de un archivo
JS en una función?
125. Preguntas de entrevistas
• ¿Cuál es el motivo de rodear todo el código de un archivo
JS en una función?
Mediante esta técnica creamos una closure alrededor del
contenido del archivo y un namespace privado controlando así
qué variables/métodos serán visibles desde el exterior y
evitando posibles conflictos de nombres.
127. Preguntas de entrevistas
• ¿Qué es NaN? ¿Cómo podemos saber si un valor es NaN?
El valor NaN representa un valor no numérico. Éste valor
resulta de operaciones que no pueden ser completadas,
normalmente, porque alguno de sus operandos no es numérico
(‘abc’ / 2).
Debido a que NaN == NaN es falso, la única forma de comprobar
si un valor es NaN es mediante la función isNaN()
128. Preguntas de entrevistas
• ¿Cuál es el significado de incluir “use strict” en un script?
¿Cuáles son los beneficios de hacerlo?
129. Preguntas de entrevistas
• ¿Cuál es el significado de incluir “use strict” en un script?
¿Cuáles son los beneficios de hacerlo?
“use strict” es una forma de habilitar modo estricto JS durante un
script o una función. Éste modo nos ayuda a evitar errores comunes.
Las ventajas de hacerlo son:
• Evitar definir variables globales por error.
• Evitar definir dos propiedades con mismo nombre en un objeto.
• Evitar nombrar dos argumentos de una función iguales.
• Evitar sobreescribir el array arguments de una función.
• …
130. Preguntas de entrevistas
• Escribir una función que retorne un booleano que indique si
una cadena es un palíndromo o no.
• Puntos extra por hacerlo en una sola línea (< 80 caracteres)
131. Preguntas de entrevistas
• Escribir una función que retorne un booleano que indique si
una cadena es un palíndromo o no.
• Puntos extra por hacerlo en una sola línea (< 80 caracteres)
function isPalindrome(str) { return str.split('').reverse().join('') === str; }
133. Programación: Extensión de contenido
• Detección avanzada de propiedades
• Accessor properties
• Atributos de las propiedades
134. Propiedades: Detección
• Operador ‘in’: Detecta propiedades propias o heredadas.
var o = { x: 1 };
“x” in o; // true
“y” in o; // false
“toString” in o; // true
• Método hasOwnProperty(): Detecta propiedades propias, no
heredadas, sean enumerables o no.
var o = { x: 1 };
o.hasOwnProperty(“x”); // true
o.hasOwnProperty(“y”); // false
o.hasOwnProperty(“toString”); // false
135. Propiedades: Detección
• Método propertyIsEnumerable(): Detecta propiedades
propias y enumerables
var o = { x: 1 };
o.propertyIsEnumerable(“x”); // true
o.propertyIsEnumerable(“y”); // false
o.propertyIsEnumerable(“toString”); // false
136. Propiedades: Enumeración
• Bucle for/in: Propiedades propias o heredadas enumerables
var o = { x: 1, y: 2, z: 3 };
for(p in o) {
console.log(p);
console.log(o[p]);
}
• Método Object.keys(objeto): Retorna un Array con las
propiedades propias y enumerables
• Método Object.getOwnPropertyNames(objeto): Retorna un
Array con las propiedades propias, sean enumerables o no
137. Propiedades: Comparativa
Método
de
Acceso Propias Heredadas Enumerables No
enumerables
Acceso
simple
(.
ó
[]) Sí Sí Sí Sí
Operador
in Sí Sí Sí Sí
Método
hasOwnProperty()
Sí No Sí Sí
Método
propertyIsEnumerable()
Sí No Sí No
Bucle
for/in Sí Sí Sí No
Object.keys() Sí No Sí No
Object.getOwnProperty
Names()
Sí No Sí Sí
138. Accessor properties
Consultar o asignar una ‘accessor property’ significa la
ejecución del método get/set correspondiente
var o = {
_a: 3,
get a() {
return this._a;
},
set a(value) {
this._a = value;
}
};
o.a = 4;
o.a;
139. Propiedades: Atributos
• Value: El propio valor de la propiedad.
• Writable: Determina si es modificable o no.
• Get: Función getter
• Set: Función setter.
• Enumerable: Determina si la propiedad es enumerable o
no.
• Configurable: Determina si los estos atributos pueden ser
modificados o no.
142. Propiedades: Manejando atributos
Método Object.defineProperty(): Crea o modifica los
atributos de una propiedad si ésta es propia y configurable.
var descriptor = { value: 1, writable: true,
enumerable: false, configurable: true};
var o = {};
Object.defineProperty(0, “x”, descriptor);
o.x; // 1
Object.keys(o); // []
143. Manejando atributos: Ejercicio!
• Dada esta inicialización, ¿se podría cambiar el valor de
o.x? ¿Y el de o1.x? ¿Cómo?
• Pista: ¿Cuál es el valor por defecto del atributo
configurable?
var o = {};
Object.defineProperty(o, “x”, { value: 1, writable: false });
var o1 = { x: 1 };
Object.defineProperty(o1, “x”, { writable: false });
144. Manejando atributos: Solución
• La solución está en el atributo configurable de la propiedad y los valores
por defecto, que dependen del método que usemos para definir la
propiedad.
• Definición literal: Todos los atributos = true.
• Definición usando Object.defineProperty: Todos los atributos no
especificados = false.
Object.defineProperty(o, “x”, { value: 2 }); // Error!! x no es configurable
Object.defineProperty(o1, “x”, { value: 2 }); // OK