tutorial traduccion google español dart

traduccion - ¿Diferencia entre “var” y tipo “dinámico” en Dart?



dart vs javascript (3)

prueba esto en DartPad :

void main() { dynamic x = ''hal''; x = 123; print(x); var a = ''hal''; a = 123; print(a); }

Puedes cambiar el tipo de x, pero no a.

Según este artículo :

Como sabrá, dynamic (como se llama ahora) es el tipo de stand-in cuando no se proporciona una anotación de tipo estático.

Entonces, ¿cuál es la diferencia entre dynamic y var ? ¿Cuándo usar?


var , como final , se utiliza para declarar una variable. No es un tipo en absoluto.

Dart Editor es lo suficientemente inteligente como para saber el tipo exacto en algunas situaciones. Por ejemplo, las siguientes dos afirmaciones son similares en el editor si ha activado "usar información de tipo inferida para verificaciones de tipo" en las preferencias:

var a = "abc"; // type of variable is dynamic, // but editor can infer it is a string String a = "abc"; // type of variable is String

Por otro lado, dynamic es un tipo especial que indica que puede ser cualquier tipo (también conocido como clase). Por ejemplo, al convertir un objeto en dynamic , puede invocar cualquier método (suponiendo que haya uno).

(foo as dynamic).whatever(); //valid. compiler won''t check if whatever() exists (foo as var).whatever(); //illegal. var is not a type


dinámico es un tipo subyacente a todos los objetos Dart. No debería necesitar usarlo explícitamente en la mayoría de los casos.

var es una palabra clave, que significa "No me importa señalar cuál es el tipo aquí", dejándolo dinámico por defecto.

Use var si espera que la asignación de una variable cambie durante su vida útil:

var msg = "Hello world."; msg = "Hello world again.";

Use final si espera que la asignación de una variable permanezca igual durante su vida útil:

final msg = "Hello world.";

El uso de final (liberalmente) lo ayudará a detectar situaciones en las que accidentalmente cambia la asignación de una variable cuando no tenía la intención de hacerlo.

Tenga en cuenta que existe una buena distinción entre final y const cuando se trata de objetos. final no necesariamente hace que el objeto en sí sea inmutable, mientras que const hace:

// can add/remove from this list, but cannot assign a new list to fruit. final fruit = ["apple", "pear", "orange"]; fruit.add("grape"); // cannot mutate the list or assign a new list to cars. final cars = const ["Honda", "Toyota", "Ford"]; // const requires a constant assignment, whereas final will accept both: const names = const ["John", "Jane", "Jack"];