-->

viernes, 29 de abril de 2022

domingo, 25 de julio de 2021

9.- Tipos de datos PHP

PHP admite los siguientes tipos de datos: 
  •  String
  •  Integer
  • Float (floating point numbers - also called double)
  •  Boolean
  •  Array
  •  Object 
  • NULL 
  • Resource

Cadena PHP

Una cadena es una secuencia de caracteres, como "¡Hola mundo!".

Una cadena puede ser cualquier texto entre comillas. Puede utilizar comillas simples o dobles:

<?php
$x = "Hola ITSVA!";
$y = 'Hola ITSVA!';

echo $x;
echo "<br>";
echo $y;
?>

Entero PHP

Un tipo de datos entero es un número no decimal entre -2,147,483,648 y 2,147,483,647.

Reglas para enteros:

  • Un número entero debe tener al menos un dígito
  • Un número entero no debe tener un punto decimal
  • Un número entero puede ser positivo o negativo
  • Los números enteros se pueden especificar en: notación decimal (base 10), hexadecimal (base 16), octal (base 8) o binaria (base 2)

En el siguiente ejemplo, $x es un número entero. La función PHP var_dump () devuelve el tipo y valor de datos:

<?php

$x = 5985;
var_dump($x);

?>

PHP float

Un float (número de punto flotante) es un número con un punto decimal o un número en forma exponencial.

En el siguiente ejemplo, $x es un flotante. La función PHP var_dump () devuelve el tipo y valor de datos:

<?php
$x = 10.365;
var_dump($x);
?>

PHP Boolean

A Boolean representa dos posibles estados: TRUE or FALSE.

$x = true;
$y = false;

Los booleanos se utilizan a menudo en pruebas condicionales. Aprenderá más sobre las pruebas condicionales en un capítulo posterior de este tutorial.

PHP Array

Una Array almacena varios valores en una sola variable.

En el siguiente ejemplo, $cars es una array. La función PHP var_dump () devuelve el tipo y valor de datos:

Ejemplo

<?php
$cars = array("Volvo","BMW","Toyota");
var_dump($cars);
?>

PHP Object

Las clases y los objetos son los dos aspectos principales de la programación orientada a objetos.

Una clase es una plantilla para objetos y un objeto es una instancia de una clase.

Cuando se crean los objetos individuales, heredan todas las propiedades y comportamientos de la clase, pero cada objeto tendrá valores diferentes para las propiedades.

Supongamos que tenemos una clase llamada Car. Un automóvil puede tener propiedades como modelo, color, etc. Podemos definir variables como $modelo, $color, etc., para mantener los valores de estas propiedades.

Cuando se crean los objetos individuales (Volvo, BMW, Toyota, etc.), heredan todas las propiedades y comportamientos de la clase, pero cada objeto tendrá valores diferentes para las propiedades.

Si crea una función __construct (), PHP llamará automáticamente a esta función cuando cree un objeto a partir de una clase.

Ejemplo

<?php
class Car {
  public $color;
  public $model;
  public function __construct($color, $model) {
    $this->color = $color;
    $this->model = $model;
  }
  public function message() {
    return "My car is a " . $this->color . " " . $this->model . "!";
  }
}

$myCar new Car("black""Volvo");
echo $myCar -> message();
echo "<br>";
$myCar new Car("red""Toyota");
echo $myCar -> message();
?>

PHP NULL Value

Null es un tipo de datos especial que solo puede tener un valor: NULL.

Una variable de tipo de datos NULL es una variable que no tiene ningún valor asignado.

Sugerencia: Si se crea una variable sin un valor, se le asigna automáticamente un valor de NULL.

Las variables también se pueden vaciar estableciendo el valor en NULL:

Ejemplo

<?php
$x = "Hello world!";
$x = null;
var_dump($x);
?>

PHP Resource

El tipo de recurso especial no es un tipo de datos real. Es el almacenamiento de una referencia a funciones y recursos externos a PHP.

Un ejemplo común de uso del tipo de datos de resource es una llamada a la base de datos.


domingo, 24 de mayo de 2020

Lenguajes de programación de Software mejor pagados en México 2019

Estos son los lenguajes de programación de software mejor pagados en México



Una de las preguntas más frecuentes que suelen tener los estudiantes universitarios de carreras a fines en programación, es el lenguaje de software que deben elegir para especializarse.

Si bien, las tecnologías han demostrado ser un sector de constante cambio, el desarrollo de software que lo respalda también lo es, y es por esta razón que resulta interesante continuar el aprendizaje de nuevos lenguajes y mantenerse al día de las tendencias en la industria.

El estudio

Según el estudio realizado por Software Guru a finales de 2018, con una muestra poblacional de 2,075 profesionistas en el país con actividad en el sector, el promedio mensual en el area es de $33,000 moneda nacional, 52% son titulados de universidad. Sin embargo esto no quiere decir que todas los lenguajes reciban la misma percepción económica, cabe mencionar que el nivel de ingles que se tenga también afecta abruptamente el sueldo, así como los años de experiencia y otros dominios que se tengan.

Lenguajes mejor pagados

Los lenguajes de programación arrojados de este proyecto reflejan que Elixir tiene de momento una implementación baja en esta muestra con 32 personas, sin embargo resulta ser la mejor pagada con sueldo promedio de $54,000 pesos al mes. El segundo lugar lo lleva Go con 34 personas y un sueldo promedio de $46,800 y en tercer lugar se encuentra Ruby con más implementación (112 personas) con sueldo promedio de $42,000.

Otros lenguajes como Python, Java y PHP son de los más populares y con mayor cantidad poblacional lo que repercute en que los sueldos bajen a $35,000, $32,000 y $20,000 respectivamente.

Vale la pena observar que los primeros tres se debe a que hay poca oferta y más demanda, eso no significa que sean las más buscadas.

Experiencia

En esta investigación también se logró apreciar que el salario medio de los primeros 7 años se mantiene lineal con un incremento de 5 mil pesos anual por año de experiencia, a partir del octavo año el salario se estabiliza al rededor de los 40 mil pesos mensuales.

Si bien el titulo universitario continúa siendo un requisito en muchas empresas, resulta importante agregar certificaciones y proyectos en linea que puedan consultar los reclutadores. Una buena practica es tener un portafolio en plataformas como Git Hub.

Tomado de Digital El Heraldo de México


miércoles, 25 de marzo de 2020

3.-Requerimientos de PHP y Cambios en Yii2


Requerimientos de PHP
Yii 2.0 requiere PHP 5.4 o mayor, lo que es un gran progreso ya que Yii 1.1 funcionaba con PHP 5.2. Como resultado, hay muchas diferencias a nivel del lenguaje a las que deberías prestar atención. Abajo hay un resumen de los mayores cambios en relación a PHP:

  • Namespaces
  • Funciones anónimas
  • La sintaxis corta de Arrays [...elementos...] es utilizada en vez de array(...elementos...).
  • Etiquetas cortas de echo. Ahora en las vistas se usa <?=. Esto se puede utilizar desde PHP 5.4.
  • SPL - Biblioteca estándar de PHP.
  • Enlace estático en tiempo de ejecución.
  • Fecha y Hora,
  • Traits.
  • intl. Yii 2.0 utiliza la extensión intl de PHP como soporte para internacionalización.

Namespace

El cambio más obvio en Yii 2.0 es el uso de namespaces. Casi todas las clases del núcleo utilizan namespaces, ej., yii\web\Request. El prefijo “C” no se utiliza más en los nombre de clases. El esquema de nombres sigue la estructura de directorios. Por ejemplo, yii\web\Request indica que el archivo de la clase correspondiente web/Request.php está bajo el directorio de Yii framework.
(Puedes utilizar cualquier clase del núcleo sin necesidad de incluir el archivo que la contiene, gracias al autoloader de Yii.).

Componentes y Objetos

Yii2.0 parte la clase CComponent de1.1 en dos clases:yii\base\BaseObject y yii\base\Component. La clase BaseObject es una clase base que permite definir propiedades de object a través de getters y setters. La clase Component extiende de BaseObject y soporta eventos y comportamientos.
Si tu clase no necesita utilizar las características de eventos o comportamientos, puedes considerar usar BaseObject como clase base. Esto es frecuente en el caso de que las clases que representan sean estructuras de datos básicas.

Configuración de objetos

La clase BaseObject introduce una manera uniforme de configurar objetos. Cualquier clase descendiente de BaseObject debería declarar su constructor (si fuera necesario) de la siguiente manera para que puede ser adecuadamente configurado:

En el ejemplo de arriba, el ´ultimo parámetro del constructor debe tomar un array de configuración que contiene pares clave-valor para la inicialización de las propiedades al final del mismo. Puedes sobrescribir el método init() para realizar el trabajo de inicialización que debe ser hecho después de que la configuración haya sido aplicada.
Siguiendo esa convención, podrás crear y configurar nuevos objetos utilizando un array de configuración:










Eventos

En Yii1, los eventos eran creados definiendo un método on (ej.,onBeforeSave). En Yii 2, puedes utilizar cualquier nombre de evento. Ahora puedes disparar un evento utilizando el método trigger():

$event = new \yii\base\Event;
$component->trigger($eventName, $event);

Para conectar un manejador a un evento, utiliza el método on():

$component->on($eventName, $handler);

// Para desconectar el manejador, utiliza:
// $component->off($eventName, $handler);

Hay muchas mejoras en lo que respecta a eventos. 

Alias

Yii 2.0 extiende el uso de alias tanto para archivos/directorios como URLs. Yii 2.0 ahora requiere que cada alias comience con el carácter @, para diferenciarlos de rutas o URLs normales. Por ejemplo, el alias @yii corresponde al directorio donde Yii se encuentra instalado. Los alias están soportados en la mayor parte del n´ucleo. Por ejemplo, yii\caching\FileCache::$cachePath puede tomar tanto una ruta de directorios normal como un alias.
Un alias está estrechamente relacionado con un namespace de la clase.
Se recomienda definir un alias por cada namespace raíz, y así poder utilizar el autoloader de Yii sin otra configuración. Por ejemplo, debido a que @yii se refiere al directorio de instalación, una clase como yii\web\Request puede ser autocargada. Si estás utilizando una librería de terceros, como
Zend Framework, puedes definir un alias @Zend que se refiera al directorio de instalación de ese framework. Una vez realizado esto, Yii será capaz de autocargar cualquier clase de Zend Framework también.

Vistas




¡NO TE DESESPERES ES NECESARIO QUE CONOZCAS QUE SE PUEDE HACER CON YII2 PARA CUANDO LO NECESITES BUSCAS LA INFORMACIÓN RELACIONADA!!!!!!!         CONTINUAMOS...   :)

Modelos

Yii 2.0 utiliza yii\base\Model como modelo base, algo similar a CModel en 1.1. La clase CFormModel ha sido descartada por completo. Ahora, en Yii 2 debes extender de yii\base\Model para crear clases de modelos basados en formularios.
Yii 2.0 introduce un nuevo método llamado scenarios() para declarar escenarios soportados, y para indicar bajo que escenario un atributo necesita ser validado, puede ser considerado seguro o no, etc. Por ejemplo:









En el ejemplo anterior, se declaran dos escenarios: backend y frontend. Para el escenario backend son considerados seguros ambos atributos, email y role, y pueden ser asignados masivamente. Para el escenario frontend, email puede ser asignado masivamente mientras role no. Tanto email como role deben ser validados utilizando reglas (rules).
El método rules() aún es utilizado para declara reglas de validación.
Ten en cuenta que dada la introducción de scenarios(), ya no existe el validador unsafe.
En la mayoría de los casos, no necesitas sobrescribir scenarios() si el método rules() especifica completamente los escenarios que existirán, y si no hay necesidad de declarar atributos inseguros (unsafe).

Controladores

Yii 2.0 utiliza yii\web\Controller como controlador base, similar a CWebController en Yii 1.1. yii\base\Action es la clase base para clases de acciones.
El impacto más obvio de estos cambios en tu código es que que cada acción del controlador debe devolver el contenido que quieres mostrar en vez de mostrarlo directamente:

Widgets

Yii 2.0 utiliza yii\base\Widget como clase base de los widgets, similar a CWidget en Yii 1.1.
Para obtener mejor soporte del framework en IDEs, Yii 2.0 introduce una nueva sintaxis para utilizar widgets. Los métodos estáticos begin(), end(), y widget() fueron incorporados, y deben utilizarse así:











Temas

Los temas funcionan completamente diferente en Yii 2.0. Ahora están basados en un mecanismo de mapeo de rutas, que mapea la ruta de un archivo de la vista de origen a uno con un tema aplicado. Por ejemplo, si el mapeo de ruta de un tema es [’/web/views’ => ’/web/themes/basic’], entonces la versión con el tema aplicado del archivo /web/views/site/index.php sería /web/themes/basic/site/index.php. Por esta razón, ahora los temas pueden ser aplicados a cualquier archivo de la vista, incluso una vista renderizada fuera del contexto de un controlador o widget.
Ademas, el componente CThemeManager ya no existe. En cambio, theme es una propiedad configurable del componente view de la aplicación.

Filtros de Acciones

Los filtros de acciones son implementados a través de comportamientos.
Para definir un nuevo filtro personalizado, se debe extender de yii\base\ActionFilter. Para utilizar el filtro, conecta la clase del filtro al controlador como un comportamiento. Por ejemplo, para utilizar el filtro yii\filters\AccessControl, deberías tener el siguiente código en el controlador:



Assets

Yii 2.0 introduce un nuevo concepto llamado asset bundle que reemplaza el concepto de script package encontrado en Yii 1.1.
Un asset bundle es una colección de archivos assets (ej. archivos JavaScript, archivos CSS, imágenes, etc.) dentro de un directorio. Cada asset bundle está representado por una clase que extiende de yii\web\AssetBundle. Al registrar un asset bundle a través de yii\web\AssetBundle::register(), haces que los assets de dicho bundle sean accesibles vía Web. A diferencia de Yii 1, la página que registra el bundle contendrá automáticamente las referencias a los archivos JavaScript y CSS especificados en el bundle.

Helpers

Yii 2.0 introduce muchos helpers estáticos comúnmente utilizados, incluyendo:

yii\helpers\Html
yii\helpers\ArrayHelper
yii\helpers\StringHelper
yii\helpers\FileHelper
yii\helpers\Json

Formularios

Yii 2.0 introduce el concepto de campo (field) para construir formularios utilizando yii\widgets\ActiveForm. Un campo es un contenedor que consiste en una etiqueta, un input, un mensaje de error y/o texto de ayuda.
Un campo es representado como un objeto ActiveField. Utilizando estos campos, puedes crear formularios máas legibles que antes:


Constructor de Consultas

En Yii 1.1, la generaci´on de consultas a la base de datos estaba dividida
en varias clases, incluyendo CDbCommand, CDbCriteria, y CDbCommandBuilder. Yii
2.0 representa una consulta a la base de datos en t´erminos de un objeto Query que puede ser convertido en una declaraci´on SQL con la ayuda de QueryBuilder detr´as de la escena. Por ejemplo:


Lo mejor de todo, dichos métodos de generación de consultas pueden ser también utilizados mientras se trabaja con Active Record.

Active Record (ESTE ES MANEJADOR DE LA BD)

Yii 2.0 introduce muchísimos cambios con respecto a Active Record. Los dos más obvios se relacionan a la generación de consultas y al manejo de relaciones.
La clase de Yii 1.1 CDbCriteria es reemplazada por yii\db\ActiveQuery en Yii 2. Esta clase extiende de yii\db\Query, y por lo tanto hereda todos los métodos de generación de consultas. Para comenzar a generar una consulta, llamas al método yii\db\ActiveRecord::find():











Para declarar una relación, simplemente define un método getter que devuelva un objeto ActiveQuery. El nombre de la propiedad definida en el getter representa el nombre de la relación. Por ejemplo, el siguiente código declara una relación orders (en Yii 1.1, las relaciones se declaraban centralmente en el método relations()):


Ahora puedes utilizar $customer->orders para acceder a las ´ordenes de la tabla relacionada. También puedes utilizar el siguiente código para realizar una consulta relacional ‘sobre la marcha’ con una condición personalizada:

$orders = $customer->getOrders()->andWhere(’status=1’)->all();

Cuando se utiliza la carga temprana (eager loading) de la relación, Yii 2.0 lo hace diferente de 1.1. En particular, en 1.1 una declaración JOIN sería creada para seleccionar tanto los registros de la tabla primaria como los relacionados. En Yii 2.0, dos declaraciones SQL son ejecutadas sin utilizar un JOIN: la primera trae todos los modelos primarios, mientras que la segunda trae los registros relacionados utilizando como condición la clave primaria de los primarios.
En vez de devolver objetos ActiveRecord, puedes conectar el método asArray() mientras generas una consulta que devuelve un gran número de registros. Esto causará que el resultado de la consulta sea devuelto como arrays, lo que puede reducir significativamente la necesidad de tiempo de CPU y memoria si el número de registros es grande. Por ejemplo:

$customers = Customer::find()->asArray()->all();

Otro cambio es que ya no puedes definir valores por defecto a los atributos a través de propiedades públicas. Si lo necesitaras, debes definirlo en el método init de la clase del registro en cuestión.








Anteriormente, sol´ıa haber algunos problemas al sobrescribir el constructor de una clase ActiveRecord en 1.1. Estos ya no están presentes en Yii 2.0. Ten en cuenta que al agregar parámetros al constructor podrías llegar a tener que sobrescribir yii\db\ActiveRecord::instantiate().
Hay muchos otros cambios y mejoras con respecto a ActiveRecord

Active Record Behaviors

En 2.0, hemos eliminado la clase del comportamiento base CActiveRecordBehavior . Si desea crear un comportamiento Active Record, usted tendrá que extender directamente de yii\base\Behavior. Si la clase de comportamiento debe responder a algunos eventos propios, usted tiene que sobrescribir los métodos events() como se muestra a continuación,



 User e IdentityInterface

La clase CWebUser de 1.1 es reemplazada por yii\web\User, y la clase CUserIdentity ha dejado de existir. En cambio, ahora debes implementar yii\web\IdentityInterface el cual es mucho más directo de usar. El template de proyecto avanzado provee un ejemplo así.


 Manejo de URLs

El manejo de URLs en Yii 2 es similar al de 1.1. Una mejora mayor es que el manejador actual ahora soporta parámetros opcionales. Por ejemplo, si tienes una regla declarada como a continuación, entonces coincidir´a tanto con post/popular como con post/1/popular. En 1.1, tendrías que haber creado dos reglas diferentes para obtener el mismo resultado

[
’pattern’ => ’post/<page:\d+>/<tag>’,
’route’ => ’post/index’,
’defaults’ => [’page’ => 1],
]

Un cambio importante en la convención de nombres para rutas es que los nombres en CamelCase de controladores y acciones ahora son convertidos a minúsculas y cada palabra separada por un guión, por ejemplo el id del controlador CamelCaseController será camel-case.


Uffffff ya en el siguiente post a empezar con el lenguaje yii2 :)

Tomado de la Guía Definitiva de Yii 2.0
Quiang Xue, Alexander Makarov, Carsten Brandt, Klimov Paul y Toda la comunidad de Yii2

martes, 24 de marzo de 2020

2.-Corriendo la Aplicación creada en Yii2



Después de haber instalado Yii, tienes una aplicación totalmente funcional a la que se puede acceder a través de la URL http://hostname/avanzada/web/index.php o http://hostname/index.php, dependiendo de tu configuración. Esta sección será una introducción a la funcionalidad incluida de la aplicación, cómo se organiza el código, y cómo la aplicación maneja los requests en general.
La versión instalada en tu caso es la avanzada.


Funcionalidad

La aplicación básica contiene 4 páginas:
  • página principal, mostrada cuando se accede a la URL http://hostname/index.php,
  • página "Acerca de (About)",
  • la página "Contacto (Contact)", que muestra un formulario de contacto que permite a los usuarios finales contactarse vía email,
  • y la página "Login", que muestra un formulario para loguearse que puede usarse para autenticar usuarios. Intenta loguearte con "admin/admin", y verás que el elemento "Login" del menú principal cambiará a "Logout".
Estas páginas comparten un encabezado y un pie. El encabezado contiene una barra con el menú principal que permite la navegación entre las diferentes páginas.
También deberías ver una barra en la parte inferior de la ventana del navegador. Esta es la útil herramienta de depuración provista por Yii para registrar y mostrar mucha información de depuración, tal como los mensajes de log, response status, las consultas ejecutadas a la base de datos, y más.
Adicionalmente a la aplicación web, hay un script de consola llamado yii, localizado en el directorio base de la aplicación. El script puede ser utilizado para ejecutar tareas de fondo y tareas de mantenimiento de la aplicación, las cuales son descritas en la Sección de Aplicación de Consola.

Estructura de la aplicación

Los archivos y directorios más importantes en tu aplicación son (asumiendo que la raíz de la aplicación es basic): tu tienes la avanzada y por lo tanto hay más elementos en la estructura
basic/                  base path de la aplicación
    composer.json       archivo utilizado por Composer, describe información de sus paquetes y librerías
    config/             contiene la configuración de las aplicaciones (y otras)
        console.php     configuración de la aplicación de consola
        web.php         configuración de la aplicación web
    commands/           contiene las clases de comandos de consola
    controllers/        contiene las clases de los controladores
    models/             contienes las clases del modelo
    runtime/            contiene archivos generados por Yii en tiempo de ejecución, como archivos de log y cache
    vendor/             contiene los paquetes y librerías instalados por Composer, incluyendo el propio núcleo de Yii
    views/              contiene los archivos de vistas (templates)
    web/                raíz web de la aplicación, contiene los archivos accesibles vía Web
        assets/         contiene los assets publicados (javascript y css) por Yii
        index.php       el script de entrada (o bootstrap) de la aplicación
    yii                 el script de ejecución de los comandos de consola de Yii
Yii implementa el patrón de diseño modelo-vista-controlador (MVC), que es reflejado en la estructura de directorios utilizada. El directorio models contiene todas las clases del modelo, el directorio views contiene todas las vistas (templates), y el directorio controllers contiene todas las clases de controladores.
El siguiente diagrama muestra la estructura estática de una aplicación.
Estructura Estática de una Aplicación
Cada aplicación tiene un script de entrada web/index.php que es el único script PHP accesible vía web. El script de entrada toma una petición (request) entrante y crea una instancia de una aplicación para manejarlo. La aplicación resuelve la petición (request) con la ayuda de sus componentes, y la envía al resto de los elementos MVC. Los widgets son usados en las vistas para ayudar a construir elementos de interfaz complejos y dinámicos.

Ciclo de Vida de una Petición (Request)

El siguiente diagrama muestra cómo una aplicación maneja una petición.
Ciclo de Vida de un Request
  1. Un usuario realiza una petición al script de entrada web/index.php.
  2. El script de entrada carga la configuración de la aplicación y crea una instancia de la aplicación para manejar la consulta.
  3. La aplicación resuelve la ruta solicitada con la ayuda del componente request de la aplicación.
  4. La aplicación crea una instancia de un controlador para manejar la petición.
  5. El controlador crea una instancia de una acción y ejecuta los filtros de dicha acción.
  6. Si alguno de los filtros falla, la acción es cancelada.
  7. Si todos los filtros pasan, la acción es ejecutada.
  8. La acción carga datos del modelo, posiblemente de la base de datos.
  9. La acción renderiza una vista, pasándole los datos del modelo cargado.
  10. El resultado de la renderización es pasado al componente response de la aplicación.
  11. El componente response envía el resultado de la renderización al navegador del usuario.
Eso es todo con respecto al funcionamiento y estructura de una Aplicación Yii2 con la plantilla avanzada.

Si todos estos elementos son un poco confusos al inicio no te preocupes conforme vayas avanzando se te harán más familiares y empezaras con las expresiones ahhhh era eso , ahhh ya entendí ó ahhhhhh ok ok

viernes, 1 de noviembre de 2019

Angular vs React vs Vue

Por Fernando Herrera, Analista programador e instructor en línea(UDEMY)

Hice este artículo porque es una pregunta que me hacen a diario, ¿Cuál es mejor?, ¿Cuál debería de aprender?, etc…estas son ideas que yo tengo al respecto.

Tengan presente que mi opinión es que no hay ninguno mejor que otro, simplemente tienen diferentes características y si hoy, siguen vivos, en un mundo donde todos los días aparecen nuevos frameworks de JavaScript y estos 3 siguen sobresaliendo, quiere decir que sea como sean, son muy buenos.

Angular (Angular la última versión), en lo particular no me gusta la curva de aprendizaje, es bastante alta y si no se tiene la introducción ideal puede asustar mucho especialmente con los decoradores y TypeScript…
Pero me gusta mucho lo veloz que es para hacer una aplicación cuando ya lo conoces, los componentes, la reutilización de los mismos, los servicios, la inyección de dependencias, los pipes, la personalización y la integración con RXJS. También las rutas, las validaciones, formularios y muchas otras cosas.
Ahora mucho del éxito de Angular 2+, es porque su predecesor AngularJS fue muy popular, hoy en día se siguen haciendo aplicaciones en esa versión de Angular.. muchas empresas se quedaron con AngularJS porque tienen muchas aplicaciones desarrolladas en ese Framework. La controversia que sucedido cuando salió Angular 2+ contra AngularJS hizo que muchos otros Frameworks como Backbone, React y Vue tomaran más fuerza porque a la gente no le gusto la idea de tener que aprender un nuevo Framework ya que Angular 2 había cambiado tanto, y se tenía mucho miedo que Angular 3 (que nunca salió), fuera a pasar lo mismo. (que no fue así)
Ahora, Angular 2+ efectivamente es mejor que AngularJS, es más rápido y eficiente, aunque a veces el peso de las aplicaciones en producción es superior al de Angular, mucha gente se le olvida que en el bundle generado por Angular va todo el código de las librerías usadas, lo que lo hace muy útil para no preocuparse por el cache del navegador web cuando hacíamos cambios pequeños (entre otras cosas)
Ahora con las actualizaciones de Angular, también muchas personas se asustan porque tienen presente ese salto que fue de pasar de AngularJS a Angular 2+, normalmente es bueno tener actualizaciones periódicas, ningún framework es perfecto y necesita ser mejorado constantemente, lo que hace que todos nos beneficiemos de eso porque las aplicaciones serán más seguras, rápidas y eventualmente nos obligan a tener mejores prácticas de desarrollo… nadie te obliga tampoco a actualizarte, mira el caso de aplicaciones de AngularJS, se quedo en la versión 1.6 y conozco lugares donde esas aplicaciones ya llevan años corriendo sin problemas.
Ahora, TypeScript?, muchas personas cuando comienzan en el framework también se asustan por esto, especialmente aquellos que están acostumbrados a trabajar con Vanilla JavaScript (JavaScript puro), como se programo mucho AngularJS… porque ahora hay cosas un poco diferentes como interfaces, importación de módulos, tipado de datos y mucho más… realmente no hay que tener miedo a eso… de hecho en mi opinión, creo que la web se ira enfocando en usar más y más TypeScript sobre JavaScript plano con los años, ya que los beneficios de TypeScript y su desarrollo nos ayudan a reducir la cantidad de errores que cometemos al escribir código y utilizar paquetes y librerías de terceros. ( si deseas saber más sobre TypeScript puedes ver este artículo)
Recuerden que estos son mis puntos de vista, muchos podrán tener otras cosas a favor, más puntos en contra, pero esta bien, no es una discusión.


Ahora REACT, en lo personal, y como muchos me conocerán, yo no soy un gran fan de React, tengo varios amigos que están metidos en esta librería y les encanta, en lo particular cada día lo estudio más y ellos me enseñan cosas con las cuales quiero trabajar en unos cursos después… y en mi experiencia puedo decir que es una librería grandiosa y que si tu ya lo conoces sigue especializándote porque hay mucho que aprender ahí como en Angular.
¿No se si notaron que use la palabra librería?, esto es porque React al menos en este momento no es un framework completo para crear aplicaciones como Angular, es solo la capa visual, pero puede hacer todo lo que hace Angular con el apoyo de la comunidad y otros paquetes.
Ahora es usado por muchas grandes compañías como Facebook (quien fue quien creo React), aunque en lo particular no me gusta mucho tener que mezclar mucho JavaScript con el HTML, en lo personal pienso que siempre deben de estar separados y como React tiene esta relación muy fuerte con este patrón, realmente tienes que aprender una sintaxis especial de JavaScript (nada que no sea imposible o nada complicado como fue aprender TypeScript)
Por ejemplo en lugar de usar la palabra class, para definir una clase de CSS, debes de usar className, se por qué lo hace pero no me gusta… aprender un framework o librería no es fácil, pero hay cosas que ya están dadas como el CSS o JavaScript, y cuando lo automatizaron apareció el SASS y el TypeScript, pero se sabe de entrada que hay que aprender algo nuevo, pero si me incomoda un poco aprender atributos HTML nuevos especiales para React, ademas recordemos que también el HTML y CSS van mejorando día con día y las nuevas características puede ser que tengan que ser adaptadas para poderlas usar en aplicaciones de React.
Claro esta es mi opinion y se que muchas personas aman React y los entiendo, es una excelente librería con una excelente historia.
Ahora como comparamos React contra Angular, bueno para la gente que no le gusta TypeScript, ya con eso deberían de estar convencidos de usar React, aunque a mi parecer usar TypeScript es algo que me hace amar programar en Angular… ahora pero muchas personas que empiezan en React sabiendo JavaScript básico, siempre tienen que aprender ECMAScript 6 porque usa mucho de los nuevos estándares de JavaScript, y por supuesto nuevas características del ES7 o JavaScript 2017 ya están en camino, así que es mentira que no deben de aprender algo si se van a React.
Otra diferencia es que no hay un proceso de conversión real en React, prácticamente todo lo que haces y como funciona tu aplicación es el resultado que tendrás cuando lo despliegues en producción, y esto es algo que a muchas personas les gusta sobre Angular… las personas que han creado aplicaciones en Angular, sabrán que cuando se hace el build de producción, a veces falla, puede fallar alguna optimización, se puede un paquete y hay que realizar algo adicional para que funcione en producción, cosa que en React es raro que suceda (pero puede suceder) pero no es tan frecuente como en Angular…
Ahora React no es tan completo como Angular en algunas áreas, como por ejemplo el Router, tienes que importarlo de un paquete comunitario, también validaciones de formularios no viene en React propio, pero en Angular si los tienes y como es parte del mismo equipo de desarrollo del framework, tendrás actualizaciones periódicas sobre esos elementos… Ahora unos amigos míos que trabajan con React, dicen que siempre tener la comunidad de desarrolladores es mejor porque no es un monopolio y hay mucha gente muy hábil que comparte sus ideas y aporta mucho a esos paquetes…
Ahora hablando de otros temas que interesan en el ambiente laboral y real, es que muchas empresas en su momento buscaban personal que supiera AngularJS, pero como paso lo que paso con la versión 2+, React tomo mucha fuerza y en estas alturas, creo que hay 50% que te digan “¿Sabe React?” o “¿Sabe Angular?”, entonces definitivamente vale la pena pensar en estudiar y conocer ambas y cuando ya seas contratado en ese trabajo, especializarte en el framework que usarás.
Ahora Angular esta pensado en crear aplicaciones de una sola página, que usualmente eso es lo que queremos, pero tener que hacer una pequeña página web para anexarla a un sitio web… pues… ahí si se complica un poco la cosa porque aunque es posible hacer una pequeña app para una pequeña sección de mi página web, sería algo pesada y esto React lo hace mucho mejor o mejor dicho, si es posible hacerlo sin tener que arrugar la cara cuando alguien te pida eso siendo alguien que domina Angular.




Ahora hablemos un poco de Vue.js, en lo particular me gusta mucho más que React y siento que es como AngularJS (el cual también me gusto mucho), de hecho siento que es el hijo de React y Angular, es como que tomaron las mejores ideas de ambos para crear Vue.
Ahora Vue no es perfecto tampoco, hay muchas cosas que no me gustan tampoco, puedes programar en ES5, o bien en ES6 si prefieres, inclusive puedes usar TypeScript (aunque es un poco más difícil, pero puedes). Ahora me gusta la separación que tienes entre JavaScript y el código HTML, es un código entendible casi sin mucho conocimiento del framework (a diferencia de Angular y React), también para realizar aplicaciones de una sola página, tienes el equipo de desarrollo del framework que hizo el router, así recibes actualizaciones periódicas, aunque el problema es que de igual forma debes de importar muchas cosas de la comunidad, como validaciones de formularios y otras cosas…
En donde vivo, pocas empresas usan Vue.js, de hecho pocos lo conocen y esto es un factor que debes de considerar antes de aprender este framework, ¿Encontraré trabajo si lo aprendo? En mi caso también estoy estudiando Vue, porque de los 3 frameworks es el que menos conozco pero el que más familiar siento al buen amigo que fue AngularJS… por eso no me siento tan perdido que cuando comencé a estudiar React, que me enojaba con los atributos html nuevos que son similares a los existentes…
Algo que puede no gustarte, puede ser muchísimo código en los componentes cuando son aplicaciones grandes, no hay inyección de dependencias, aunque siempre puedes hacer módulos y muchas otras cosas, pero a veces siento que Angular hace mucho mejor estas cosas… como les dije, puedo estar equivocado no soy un experto en Vue, aunque si me estoy preparando para serlo…
Ahora si me tocara elegir entre Vue y React, yo seleccionaría Vue, porque de verdad me molesta mucho mezclar JavaScript con HTML, porque para mi es un problema no poder trabajar con archivos HTML independientes y usar CSS y HTML regular, o bien muchas librerías que uso en mi día a día me dan problemas y tengo que buscar adaptaciones para React, pero bueno, puede ser por mi falta de experiencia en React…  y también me gusta que los desarrolladores de Vue dan más paquetes que los que incluye React por defecto (como el Router)
Ahora la documentación de Vue es EXCELENTE, definitivamente es muy buena, es para mi la mejor de todas, es fácil de empezar con eso y tiene una gran comunidad amigable, muchas de las preguntas que he hecho, he sentido calidez en las respuestas y a veces me pasa que cuando he posteado preguntas sobre React y Vue, me tratan como si fuera un estúpido que no tiene idea lo mal que esta ese código que quiero implementar…
Ahora Angular es potenciado por Google y React con Facebook, Vue no tiene un gigante atrás que lo respalde, tiene un grupo de personas que yo considero genios que viven por mejorar su framework, es algo como los origines de Angular, pero ellos siguen en la face de equipo… claro es posible que si su framework sigue creciendo, terminen siendo adquiridos por una gran compañía… puedes ver el equipo de Vue.js aquí
Ahora, recuerden que Vue es un framework más nuevo que Angular o React, por lo que conseguir trabajos donde uses Vue.js es mucho menor a React y Angular, pero definitivamente hay compañías que le interesa seguir mejorando constantemente su área de desarrollo, (bueno no muchas en Latinoamérica honestamente), la mayoría solo se preocupa por su infraestructura y hacer mejor software con lo que ya tienen… pero pocas invierten en estudios de nuevos frameworks… pero como digo, puedo estar equivocado, es mi opinion persona y no estoy haciendo saliendo a las calles a realizar encuestas tampoco, es mi percepción de como se encuentra todo esto en la realidad donde vivo…
Si hablamos de las curvas de aprendizaje y no de la parte laboral que queda claro que Vue es el último, Vue es el más fácil de aprender, React el segundo y el último sería Angular con su curva tan complicada al inicio.
Hay muchas personas que hablan maravillas de React y el uso de su JSX, como hay personas que hablan maravillas del poder de Angular lo robusto que, es como hay gente que defiende a capa y espada lo simple, poderoso y fácil de aprender de Vue… la verdad que a mi parecer, debes de estudiar o enfocarte en lo que demande el trabajo… todos son excelentes, todos merecen ser estudiados y aprendidos.
Pros y contras de cada uno
Pros de Angular: Puede ser escalado a grandes equipos de trabajo, tener una persona nueva que casi no sepa Angular en el equipo no es caótico y su trabajo puede ser aislado, templates y código separado y como la mayor parte del código es proporcionado por el equipo de Angular, hay mucho menor riesgo de que al importar un Router nuevo, la aplicación explote y el uso de TypeScript para mi es un pro también.
Cons de Angular: TypeScript puede ser a veces demasiado quisquilloso a comparación de JS o JSX usado en React, el paso de AngularJS a Angular 2 asusto a mucha gente, como depende de varios paquetes como RXJS a veces surgen cambios que es necesario corregir manualmente especialmente cuando hay cambios de versiones mayores.
Pros de React: Se basa en componentes, y el hecho que AngularJS pasara a esto con su Angular 2+, dice que están en lo correcto, facebook realmente usa su librería, React es mucho más fácil de usar en varios dispositivos, aunque Angular esa Cordova, no es tan versátil como React.
Cons de React: La licencia de React es de Facebook, y últimamente Facebook no es el genio que era antes con las demandas y los riesgos de fugas de información, JSX aunque muchos lo consideran grandioso, hace un poco difícil la separación de las responsabilidades entre desarrollador y diseñador gráfico, y una queja que me han dicho mucho es que el npm en React es una pesadilla.
Pros de Vue: Template y código separado, tiene componentes como React y Angular, lo que sigue afirmando que React lo pensó muy bien, no tiene el problema de las restricciones de TypeScript, no hay problemas con licencias ya que es un grupo de personas y una gran comunidad de ayudantes, muy fácil de aprender y poderoso.
Cons de Vue: Es muy joven todavía, no hay mucha oferta laboral para él, como no tiene una gran compañía que lo respalde, se basa en la buena voluntad de las personas para seguir expandiéndolo, aunque en el peor de los casos, parece que el proyecto va por muy buen camino.
Recuerden que esto es mi simple opinion para contestar la miles de preguntas que tengo sobre este tema, no pretendo tirarle flores a ninguno y no soy experto en los 3, por lo que me es imposible hacer algo 100% apegado a la realidad, es lo que he podido apreciar en mi trabajo con estos 3 increíbles y poderoso frameworks y librerías para poder crear aplicaciones.
Mi objetivo real es darles a ustedes una opinion desde mi perspectiva que espero que los motive a ustedes a seguir aprendiendo más al respecto.