Operadores aritméticos, de asignacion y lógicos
Clase 8 de 29 • Curso de Dart
Contenido del curso
Operadores
Los operadores utilizados en Dart son los siguientes:
Unario PostExpr
expr++ expr-- () [] . ?.
Unario PreExpr
-expr !expr ~expr ++expr --expr
Multiplicativo
* / % ~/
Adición
+ -
Shift
<< >>
Bitwise
& ^ |
Relacional y tipo prueba
>= > <= < as is is!
Igualdad
== !=
Lógicos
&& ||
Si Nulo
??
Condicional
expr1 ? expr2 : expr3
Cascada
..
Asignación
*= /= ~/= %= += -= <<= >>= &= ^= |= ??=
Con los operadores puedes crear expresiones, algunos ejemplos son:
a++
a + b
a = b
a == b
c ? a : b
a is T
En la tabla de operadores, cada operador tiene mayor precedencia que los operadores de las filas siguientes. Por ejemplo, el operador multiplicativo % tiene mayor precedencia que (y por lo tanto ejecuta antes) el operador de igualdad ==, que tiene mayor precedencia que el operador lógico AND (&&). Esa precedencia significa que las siguientes dos líneas de código se ejecutan de la misma manera:
// Los paréntesis mejoran la lectura
if ((n % i == 0) && (d % i == 0)) …
// Mas difícil de leer, pero equivalente.
if (n % i == 0 && d % i == 0) …
Operadores Aritméticos
Dart soporta los operadores aritméticos habituales:
Dart también soporta operadores de incrementos y decrementos de prefijos y postfijos.
++var El cual se leería; var = var + 1 (expression value is var + 1)
var++ El cual se leería; var = var + 1 (expression value is var)
--var El cual se leería; var = var – 1 (expression value is var – 1)
var-- El cual se leería; var = var – 1 (expression value is var)
Operadores de Igualdad y relacionales
Enumeraremos el significado de la igualdad y de los operadores relacionales.
== Igual!= No igual (diferente)> Mayor que< Menor que>= Mayor que o igual a<= Menor que o igual aOperadores de prueba de tipo
Los operadores as, is, and is! son útiles para verificar los tipos en tiempo de ejecución.
as Typecast (También utilizado para especificar prefijos de biblioteca)
is Verdadero si el objeto es el tipo especificado
is! Falso si el objeto tiene el tipo especificado
Operadores de Asignación
Como ya has visto, puedes asignar valores usando el operador =. Para asignar sólo si la variable asignada es nula, utilice el operador ??=.
// Asigna valor a variable a
a = value;
// Asigna valor a b, si b es nulo; de lo contrario b se mantiene igual
b ??= value;
Operadores que existen
= –= /= %= >>= ^= += *= ~/= <<= &= |=
//Así es como trabajan
Donde op es un operador a op= b a = a op b
Ejemplo a += b a = a + b
Operadores Lógicos
Puedes invertir o combinar expresiones booleanas utilizando los operadores lógicos
!expr invierte la expresión que le sigue (cambia falso a verdadero y viceversa)
|| OR lógico
&& AND lógico
Operadores Bitwise y Shift
Puedes manipular los bits individuales de los números en Dart. Por lo general, se utilizan estos operadores de bits y de desplazamiento con enteros.
<< Desplazamiento hacia la izq>> Desplazamiento hacia la derechaEl uso de estos lo estaremos viendo mientras avancemos en el curso algunos de estos no serán visto pero te invito a probarlos y conocer la forma en que estos son utilizados, son fiel seguidor de la documentación te invito a visitarla por si tiene alguna duda o bien déjala en nuestra sección de comentarios y te ayudaremos a resolverla.
Valeria Calcina Cisneros
André Escobar
Helard Flores
Luis Salez
Valeria Calcina Cisneros
Andrés Lauga
Fernando Mellone
Edwar Baron
Edwar Baron
Hassan Hammad
Freddy Santacruz
Andres Roberto Coello Goyes
Santiago Arboleda Londoño
David Luna
SISMEX Sistemas Mexicanos
Fernando Mejia
Oscar Rodrigo Leon Mojica
Wilmer Ariel Moina Rivera
Marcela Cernelli
Usuario anónimo
Milton Andrés Sanabria
Guido Ortega
David Galicia
Fabian Anzola
Juan Guillermo Perez Cardozo
Carlos Nassif Trejo Garcia
Diego Armando Calero Galvis
Farit Albavi
juan gago
Gabriel Alejandro Delgado Álvarez
Christian David Sánchez
Melvin Salas
kevin leonardo sinza salcedo
Pedro Alejandro Rodríguez García
Uno de los operadores que creo que solo esta en Dart es la cascada
void main() { //Forma tradicional para llamar al metodo add var lista = [1]; lista.add(2); lista.add(3); lista.add(4); lista.add(5); print("Tradicional add"); lista.forEach(print); //Notacion en cascada para llamar al metodo add lista = []; lista ..add(5) ..add(4) ..add(3) ..add(2) ..add(1); print("Notacion en cascada"); lista.forEach(print); }
Saludos y no dejen de aprender! :D
Excelente dato! gracias Valeria
deberían hacer un video explicando todo esto, hay cosas que en mi vida había visto. es como si estuvieran apurados y no quieren explicar esto, y solo nos ponen una simple información... uno tiene que revisar los comentarios, ya que ahí nomas hay algunos compañeros que explican... es en serio platzi??? ??????????????????????????????????????????????????????????????
A favor. Porque si quisiera leer me iría a la documentación oficial de Dart jejejeje
Hola! en la parte final del post el profesor dice que nos explicara a mas detalle cada operador conforme vayamos avanzando el curso
Esto parece estar escrito con los pies, simplemente... Los videos se entienden, pero de este artículo entendí la mitad. Y ni hablar de ese último párrafo.
Alguien entendió esta parte? Si fuera tan amable de explicarme. 😄
Dart también soporta operadores de incrementos y decrementos de prefijos y postfijos.
var El cual se leería; var = var + 1 (expression value is var + 1) var El cual se leería; var = var + 1 (expression value is var) –var El cual se leería; var = var – 1 (expression value is var – 1) var-- El cual se leería; var = var – 1 (expression value is var)
Hola, es un problema de redacción, gracias por reportarlo, los ejemplos deberían ser más o menos así:
++var >> var = var + 1 var++ >> var = var + 1 --var >> var = var – 1 var-- >> var = var – 1
Es decir, los operadores para hacer un incremento, pueden ir como prefijo o subfijo
Esta clase podria ser mejor
Probando algunos de los operadores
main(List<String> arguments) { int i=10; bool t=true; print(i++ );//suma despues print('$i resultado despues de sumar'); print(i--);//resta despues print('$i resultado despues de restar'); print(++i);//suma previa imprime 11 porque se rest print('$i resultado es igual al previo debido a que se suma previamente'); print(--i);//resta previa print('$i resultado es igual al previo debido a que se resta previamente'); print(-i);//cambio a negativo print(!t);//negacio print(~i); String casos='P'; String result= casos=='J'?'Es Juan':'No Se Sabe'; print(result); casos='J'; result= casos=='J'?'Es Juan':casos=='P'?'Es Pedro' : 'No Se Sabe'; print(result); int a=0; a=1; print(a); a??=5; print(a); //??= este operador esta interesante porque sirve si existe no cambies y si no existe cambia int b; b??=9; print(b);//??= este operador esta interesante porque sirve si existe no cambies y si no existe cambia } result: 10 11 resultado despues de sumar 11 10 resultado despues de restar 11 11 resultado es igual al previo debido a que se suma previamente 10 10 resultado es igual al previo debido a que se resta previamente -10 false 4294967285 No Se Sabe Es Juan 1 1 9
chevere... eres de ECUADOR.!!
Hay un tour de Dart en el que hay demasiada información útil, por acá dejaré el link: Language tour | Dart
No conocía el ??=,creo que casi ningún lenguaje lo tiene...
Al parecer ninigun lenguaje lo tiene o almenos que yo conosca.
PHP en su version 7.4 si lo tiene :) jejeje
Las cascadas (..) le permiten realizar una secuencia de operaciones en el mismo objeto. Además de las llamadas a funciones, también puede acceder a los campos en ese mismo objeto. Esto a menudo le ahorra el paso de crear una variable temporal y le permite escribir un código más fluido.
Considere el siguiente código:
querySelector('#confirm') // Get an object. ..text = 'Confirm' // Use its members. ..classes.add('important') ..onClick.listen((e) => window.alert('Confirmed!'));
La primera llamada al método, querySelector (), devuelve un objeto selector. El código que sigue a la notación en cascada opera en este objeto selector, ignorando cualquier valor posterior que pueda ser devuelto.
El ejemplo anterior es equivalente a:
var button = querySelector('#confirm'); button.text = 'Confirm'; button.classes.add('important'); button.onClick.listen((e) => window.alert('Confirmed!'));
Fuente https://dart.dev/guides/language/language-tour#cascade-notation-
Un tour por Dart https://www.dartlang.org/guides/language/language-tour
Muchas gracias por tu aporte, wmoina
Siempre es bueno tener la documentación.
En la siguiente pagina: https://www.gcoding.academy/ podrán encontrar un libro introductorio sobre Dart, lo he venido siguiendo a la par del curso y complementa muy bien los temas. Este es creado por quienes construyen la comunidad de Flutter en español.
Para ver el libro si o si hay que registrarse??
En mi caso el uso de operadores me ayuda en ocasiones a reducir lineas de código y hacerlo mas legible, por ejemplo el operador ternario reduce 3 o mas lineas en ocasiones al utilizarlas en hacer una condicional 'if'
<code> void main(List<String> arguments) { var a = 3; var b= 4; var mensaje=''; //¿La variable a es mayor a la b? Si : No mensaje = a>b?'La variable a es mayor a b':'La variable b es mayor a'; print(mensaje); } </code>
me parecio muy buena este operador: a??="valor a ponerle a la variable en caso de que no exista".
seria un poco mejor que esto fuera con ejemplo en el codigo y luego ver con print
main(List<String> args) { var x = 5; var y = 2; var z = x ~/ y; //Truncates, is like a division with ints print(z); final value = 0x22; final bitmask = 0x0f; assert((value & bitmask) == 0x02); // AND assert((value & ~bitmask) == 0x20); // AND NOT assert((value | bitmask) == 0x2f); // OR assert((value ^ bitmask) == 0x2d); // XOR assert((value << 4) == 0x220); // Shift left assert((value >> 4) == 0x02); // Shift right var s1 = 5.0; int s2 = 5; print((s1 is int).toString()); //Is to check cast //as for iheritance var nu; nu = "no es nulo"; nu = null; var isnullo = nu ?? "es nulo"; print(isnullo); }```
Los operadores de dezplazamientos resultas muy útiles en algoritmos complejos y en técnicas de programación y de algoritmia avanzados como lo son los árboles de Fenwik y los SegmentTree
Sencillo ejercicio hecho con todo lo aprendido... PD: Si hay alguna cosa que puede mejorar por favor hazme saber, para mejorar :)!!
/* ***EJERCICIO*** Ordena la coleccion (list) de menor a mayor, obtiene el promedio y la muestra de datos en la consola */ void main(List<String> arguments) { List array = [5, 7, 1, 9, 21]; /* sumaElementos = sumatoria de elementos de list. numElementos = cantidad de elementos que posee la list. */ int aux, sumaElementos=0; double promedio; //ordenamiento burbuja for (int i = 0; i < 4; i++){ for (var j = 0; j < 4; j++){ if (array[j] > array[j+1]){ aux = array[j+1] ; array[j+1] = array[j]; array[j] = aux ; } } } //utilice un ciclo para almacenar la sumatoria de los elementos de la lista for (var i = 0; i < 5; i++) { sumaElementos += array[i]; } final numElementos = array.length; promedio = sumaElementos / numElementos; //impresion del list con la propiedad forEach print('Lista ordenada: '); array.forEach((val){ print(val); }); // prueba de datos print('\nSumatoria de elementos de la list: $sumaElementos'); print('Numero de elementos de la list: $numElementos'); //impresion de promedio print('El promedio es: $promedio'); }```
todavia no hemos visto los siclos for pero muy buen trabajo, me podrias explicar como funciona el ordenamiento burbuja que no lo entiendo
El algoritmo de ordenamiento de bubble sort lo que hace es ir viendo por cada dos elementos si uno es mayor que el otro y asi con todos los elementos. Pero es un algoritmo muy ineficiente, ya que pasa por todo el arreglo o conjunto de datos una cantidad de veces igual a la cantidad de elementos. Osea que si tienes 100 numeros, y solo los primeros dos estaban desorganizados, el algoritmo seguira recorriendo el array, a no ser que tengas otra parte de codigo para detenerlo.
Que valiosa información. Hay operadores que desconocia :O
?? // if null operator ??= // null-aware assignment x?.p // null-aware access x?.m() // null-aware method invocation
test!
const Object i =" 1"; // Where i is a const Object with an dynamic value... const list = (i is int) ? i as int: 4; // Use a typecast. . const map = {if (i is int) i: "int"}; // Use is and collection if. const Object e=2; const list2 = [e as int]; // Use a typecast. const set = {if (list2 is List<int>) ...list2}; // ...and a spread. print(list); print(map); print(set);
No entiendo bien qué hace. ¿Podrías explicarme? Gracias