No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Dart

Curso de Dart

Argel Franco Bejarano de la Cruz

Argel Franco Bejarano de la Cruz

Constantes (final y const)

7/29
Recursos

Las variables de tipo const y final sólo pueden ser declaradas al mismo tiempo de ser creadas, su diferencia mayor es que final es inicializada al momento de usarse, mientras const al momento de escribirse.

Aportes 41

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Aclarando la explicación de esta clase sobre las variables final y const:

  • Ambos tipos variables deben ser inicializadas al momento de ser declararlas y su valor no puede ser modificado durante la ejecución del codigo.
  • Las variables de tipo const son alojadas en la memoria al momento de ser declarada/inicializada o digase en tiempo de compilación del codigo.
  • Las variables de tipo final son alojadas en la memoria al momento de ser utilizadas en el codigo o digase en tiempo de ejecución del codigo claro si la misma es utilizada posterior a su declaración/inicialización.

Ejemplo:

const CONSTANTE = "Me alojo en memoria de inmediato";
final ultimo = 100;

// ahora se aloja en memoria el valor de la variable FINAL
if(ultimo == 100) {
  print("SI")
}

🧠 Entiendo que final se usa en tiempo de ejecución y const en tiempo de compilación.

Seria Genial que rehicieran el curso aplicando la experiencia obtenida, mejorando la vocalización, los métodos de ayuda, el sonido, la iluminación. Pero sobretodo la modulación de la voz y el sonido etc.

Final = utiliza memoria sólo si se hace uso de ella
Const = utiliza memoria desde que se implementa

RESUMEN DE LA CLASE

Constantes(final y const)

final: solo se pueden declarar una vez y es inicializada cuando se accede a ella.

final nombre = "Argel";

const: son implícitamente tipo final pero son constantes de tiempo de compilación. Si se requiere una constante a nivel de clase, debe anteponerse el prefijo “static”.

const numeroAureo = 1.618;

Principal diferencia: final se inicializa al momento de utilizarse, const desde el inicio.

final => me alojo en memoria hasta que me uses
const => me alojo en memoria al instante

final

  • A variable with the final keyword will be initialized at runtime and can only be assigned for a single time.
  • In a class and function, you can define a final variable.
  • For Flutter specific, when the state is updated, everything in the build method will be initialized again. This includes all the variables with final.

const

  • A variable with the const keyword is initialized at compile-time and is already assigned when at runtime.
  • You can’t define const inside a class. But you can in a function.
  • For Flutter specific, everything in the build method won’t be initialized again when the state is updated.
    const can’t be changed during runtime.

When to use which keyword?
A simple example for both:

  • Use final: If you don’t know what it’s value will be at compile-time. For example, when you can need to get data from an API, this happens when running your code.
  • Use const: If you are sure that a value isn’t going to be changed when running your code. For example, when you declare a sentence that always remains the same.

Entre lo que entendi y lo que revise en los comentarios

  1. Las variables tipo final y conts se denominaría en otros lenguajes como constantes por ejemplo en la variable PI=3.14…, que siempre declaraba en C como ejemplo. en toda la ejecución nunca van a varias
  2. La gran diferencia esta es cuando se carga a memoria y con ellos el uso que le vamos a dar, si nosotros necesitamos que la variable este ya utilizable desde que se compila el programa utilizamos const, con eso evitamos hacerlo en ejecución, pero si la variable necesitamos que solo cuando pasemos por una cierta condición utilizamos final.
    3.- Con ello conseguimos que si una constante de uso repetitivo siempre este lista para usarse y si solo necesitamos en ciertos casos también se pueda hacer. con ellos creo que los creadores de dart quieren optimizar en uso de la memoria evitando cargar si no es necesario.
import 'dart:math';

main(List<String> arguments) {
  final valor = sqrt(2.0);
  const numeroAureo = (1.0 ) / 2.0;

  print(numeroAureo);
  print(valor);
  valor = sqrt(2.0);
  print(valor);
  
numeroAureo = (1.0 ) / 2.0;
  print(numeroAureo);
}
result:

0.5
1.4142135623730951
Error compiling to JavaScript:
main.dart:9:3:
Error: Setter not found: 'valor'.
  valor = sqrt(2.0);
  ^^^^^
Error: Compilation failed.

Error compiling to JavaScript:
main.dart:9:3:
Error: Setter not found: 'valor'.
  valor = sqrt(2.0);
  ^^^^^
main.dart:12:1:
Error: Setter not found: 'numeroAureo'.
numeroAureo = (1.0 ) / 2.0;
^^^^^^^^^^^
Error: Compilation failed.

La diferencia esencial es que una variable const no puede ser algo a calcular a la hora de la ejecución, es decir, deben ser inicializadas con un valor constante, un ejemplo sería la fecha actual, no puedes hacer:

const date = new DateTime.now();
Se podría utilizar, por ejemplo, para algo como:

const dias_de_la_semana = 7;
Por otro lado, una final, aunque inmutable (es decir, su valor no puede cambiar), sí que se puede inicializar con algo en run-time:

final date = new DateTime.now();

aprendí más en los comentarios…

Codigo de la clase:

// Clase sobre constantes (final y const)

main(List<String> args) {
  // * Las variables definidas como final, solo se pueden declarar
  // * una vez y es inicializada cuando se accede a ella.
  final nombre = 'Argel'; // ! Inicializada con inferencia de tipos
  final String apellido = 'Bejarano'; // ! Inicialización específica.

  // * Las variables definidas como const, son implícitamente tipo final pero
  // * son constantes de tiempo de compilación.
  const numeroAureo = 1.618;

  print(nombre + " " + apellido + " - " + "$numeroAureo");

  // ! La diferencia real entre ellas es, que la variable const al momento de ser inicializada.
  // ! inmediatamente toma un lugar en la memoria y permanece allí.
  // ! Sin embargo, la variable final, solo es alojada en memoria al momento de ser utilizada.
}

La diferencia principal es que const es alojada en memoria y final solo es alojada en memoria al momento de utilizarla.

//final es una variable que debe declar e inicializarse en ese momento
//final nombre = "Angel"

//const es la misma variable solo que se realiza en tiempo de compilacion
//const numeroAureo = 1.618
//si se requiere una constante para una clase debera ser definica como static const

main(List<String> args) {
  final String nombre = "Angel";

  print(nombre);

  const edad = 32;

  print(edad);

  //La diferencia principal es que const es alojada en memoria y final solo es alojada en memoria al momento de utilizarla
}

Un aporte sobre final VS const!

//Final vs const
  //Final se puede instanciar en tiempo de ejecucion y const no
  
  final valor = [1,2,3,4];
  print(valor); //Imprimimos el array [1,2,3,4], valor asignado inicialmente
  valor.add(5); //Agregamos un valor al arrray
  print(valor); //Imprimimos el array y observamos que el valor inicial del array ha cambiado
  
  
  
  //Const
  //La asignacion de const a un objeto si hace que los valores sean inmutables
  const valor2 = [1,2,3,4];
  print(valor2);
  valor2.add(5); //Error al intentar mutar el valor inicial del array
  print(valor2);
  
  
  //Si intentamos que la lista asignada como final no sea mutable:
  final valor3 = const [1,2,3,4];
  
  //Imposible de hacer o asignar
  //const valor = final [1,2,3,4];
  
  //Posible de asignar para que el valor sea inmutable
  const valor = const [1,2,3,4]; 

Por lo que entendí si lo que quieres es que el valor de una variable no cambie tienes la opción de utilizar final o const.
-final: Permitirá asignar por lo menos una vez el valor a la variable (tiempo de ejecución).
-const: Asigna el valor durante el tiempo de compilación.

Recomiendo adicional al vídeo leer los comentarios y este enlace de la pagina de Dart para entender mejor el tema:

https://news.dartlang.org/2012/06/const-static-final-oh-my.html

En resumen: las variables pueden estar declaradas de las siguientes maneras:
Con palabra reservada ej var + nombre
Como dynamic (permite cambiar el tipo de dato en el futuro) + nombre
Directamente con el tipo de dato + nombre, sin el var, ej: int, double, String, bool. y luego el nombre de la variable
Como variable final (se deben declara e inicializar ) ej: final miNombre = ‘agus’ ; o (especificando el tipo de dato) ej: final String miNombre = 'agus’
O simplemente declarar constantes con la palabra reservada const que a diferencia de la final, const es declarada y alojada en memoria al momento de ponerla en el codigo, mientras que final es es alojad en memoria al utilizarla, y optimizar el uso del programa.
Espero les sirva compañeros, espero estar en lo cierto, saludos!

hasta ahora genial el curso!!

final vs const, pero entonces es mas optimo usar final ya que solo consume memoria si la uso ??

en el caso para optimización de memoria, entonces sería mas recomendable Final, bueno eso entendí

Hasta el momento Dart y Kotlin son muy parecidos (solo a excepción de sus colecciones) ya que const en ambos lenguajes se ejecuta en tiempo de compilación.

La diferencia entre un desarrollador y buen desarrollador es el hecho de conocer y querer aprender este tipo de cosas que aunque resultan fáciles son muy importantes.

void main(List <String> arguments) {
  const String varConstante = "Ya estoy en memoria";// const Tipo nombreVariable = valor
  final Map<String,int> myMap = {'Dato1':1,'Dato2':2,'Dato3':3};//final Declarar variable de cualquier tipo
  //no esta en memoria aún
  print(myMap);//Aqui ya esta en memoria porque estamos haciendo uso de la variable

}```

Constantes (final y const)
final: las variables definidas como final, solo se pueden declarar una vez y es inicializada cuando se accede a ella ejemplo:

<final nombre = 'Jesus'; //tipo String>

const: estas variables son implícitamente tipo final, pero son constantes de tiempo de compilación, ejemplo:

<const numeroAureo = 1.618; //const es alojada en la memoria del compilador>

Si se requiere una constante a nivel de clase, estas deberán ser definidas ‘static const’.

Docs flutter

Final y const
Si nunca tiene la intención de cambiar una variable, use final o const, en lugar de var o además de un tipo.
Una variable final se puede establecer solo una vez; Una variable constante es una constante de tiempo de compilación. (Las variables de Const son implícitamente finales). Una variable de nivel superior o clase final se inicializa la primera vez que se usa.
Nota: Las variables de instancia pueden ser final pero no const. Las variables de instancia final deben inicializarse antes de que comience el cuerpo del constructor, en la declaración de la variable, mediante un parámetro del constructor o en la lista de inicializadores del constructor .

**final y const
**
main(List<String> arguments) {
final nombre = ‘Argel’;
const edad = 32;
print(nombre); Salida = Argel
}

Porque existen las dos? cual es la diferencia entre ellas?
La diferencia principal es que const es declarada y alojada en memoria al momento de ponerla en nuestro código, en cambio final únicamente es alojada en memoria al momento de utilizarla (al momento en que el código haga uso de ella).

Interesante el denotar que, Dart siendo un lenguaje compilado, pasarán dos fases donde, en esta clase, se resuelven Final en tiempo de ejecución y Const en tiempo de compilación

Ambas establecen que la variable no cambiará de valor pero Const se aloja en memoria apenas es compilada y por lo tanto su valor es totalmente estático a lo largo del codigo mientras el valor de un Final es conocido solo a momento que el código la requiere , por lo que el valor puede no conocerse en tiempo de compilación pero si sera necesario en tiempo de ejecución, mientras que const debe conocerse tambien en tiempo de compilación

Cada que creo un proyecto en VSCODE en DART me pone

import 'Package:nombreProyecto/nombreProyecto,dart' as constantes;

Como puedo quitar que no agregue eso? ya que lo tengo que eliminar

Interesante que con final se pone en memoria solo cuando se usa.
Buen aporte.

Super!!

final (debe declararse e inicializarse al mismo tiempo)
const (este tipo de variables se alojan en la memoria, en lugar que las final)

Es correcto Dark y Kotlin se parecen, pero me gustan ambos.

intersante lod el final

una variable de tipo final debe inicializarce al mismo momento.

const hara uso de memoria al momento de ser declarada y final solo cuando se haga uso de ella.

Éste es otro buen ejemplo de la diferencia entre final y const

import 'dart:math';

main(List<String> arguments) {
  final valor = sqrt(2.0);
  const numeroAureo = (1.0 + sqrt(5.0)) / 2.0;

  print(numeroAureo);
  print(valor);
}

Interesante, a mi la verdad me ayudan estos detalles sobre las variables en dart para poder seguir programando en el sdk de flutter

Muchas gracias.

Entendí que una constante final ocupa espacio en memoria solo al momento de ser llamada en tiempo de ejecución, mientras que una const ocupa espacio en memoria desde el momento que la app se esta ejecutando aunque no sea utilizada.

main(List<String> args) {

final nombre ="Argel";

const edad =32;

print(nombre);

print(edad);
}```

Entonces la diferencia es que tienen diferentes usos para hacer mas eficiente el programa?

importante entender que no se puede reasignar las variables final y const

void main() {
  const nombre = "Nicoll";
  
  print(nombre);
  
  nombre = "Sebas";
  print(nombre);
}

Final

void main() {
  final nombre = "Nicoll";
  
  print(nombre);
  
  nombre = "Sebas";
  print(nombre);
}

Ambos daran el mismo error


Error compiling to JavaScript:
main.dart:6:3:
Error: Can't assign to the const variable 'nombre'.
  nombre = "Sebas";
  ^^^^^^
Error: Compilation failed.