Dart — Palabras clave(Contextuales)

2024-01-14T15:00:00-05:00 | 8 minutos de lectura | Actualizado en 2025-01-24T07:42:46-05:00

jaimetellezb
Dart — Palabras clave(Contextuales)

Tabla de Contenido

Introducción

Ya vimos anteriormente algunas de las palabras reservadas que no se pueden usar como identificadores en Dart, veremos ahora otras palabras clave del lenguaje.

Palabras clave contextuales

Son palabras que solo tienen significado en lugares particulares del lenguaje pero pueden usarse como identificadores en otras partes.

show

Palabra clave que sirve para importar una parte de un paquete.

// Importa sólo color
import 'package:lib/lib.dart' show color;

hide

Palabra clave que sirve para exceptuar cierta parte del paquete al importarlo.

// Importa todo excepto color
import 'package:lib/lib.dart' hide color;

async

Palabra clave que se usa para la programación asíncrona dentro de Dart al igual que await. Hay también otro uso async* para funciones generadoras asíncronas. Una función generadora es una función especial que puede generar una secuencia de valores a medida que se solicitan, en lugar de producir todos los valores de una vez.

// cuando hay un Future nos pide agregar async obligatoriamente.
Future<void> checkVersion() async {
  var version = await lookUpVersion();
  // otras sentencias
}

Stream<int> asynchronousNaturalsTo(int n) async* {
  int k = 0;
  while (k < n) yield k++;
}

sync

Palabra clave que se usa para implementar una función se generadora síncrona.

Iterable<int> naturalsNumber(int limit) sync* {
  for (int i = 0; i < limit; i++) {
    yield i;
  }
}

on

Palabra clave que se puede utilizar cuando necesite especificar el tipo de excepción. Cuando se necesite el objeto de la excepción se puede catch.

try {
// sentencias que pueden generar excepción
} on FormatException catch (e) {
// manejo solo de la excepción FormatException
} on NumberException catch (e) {
// manejo solo de la excepción NumberException
} catch (e) {
// Manejo genérico para otras excepciones
}

Palabras clave — indicadores incorporados

Son identificadores válidos en la mayoría de ocasiones, no pueden utilizarse como nombre de clases o tipos, ni como prefijos de importación.

abstract

Palabra clave que se utiliza para declarar las clases abstractas, que son clases que no requiera una implementación completa y concreta de toda su interfaz y por lo general tienen métodos abstractos.

abstract class Shape {
  // función abstracta sin implementación
  double area();

  // función concreto con implementación
  void draw() {
    print('Dibujando la figura');
  }
}

as

Palabra clave que ya conocimos en los operadores, es un operador para asignar un objeto a un tipo determinado sólo si está seguro de que el objeto es de ese tipo.

(employee as Person).firstName = 'Bob';

base

Palabra clave que se utiliza para imponer la herencia de la implementación de una clase o mixin. Una clase base no permite la implementación fuera de su propia biblioteca.

base class Vehicle {
  void moveForward(int meters) {
  // sentencias
  }
}

covariant

Palabra clave que se utiliza en algunos patrones de codificación (que no son muy utilizados) se basan en ajustar un tipo anulando el tipo de un parámetro con un subtipo, que no es válido. Covariant se refiere a la capacidad de usar un tipo más específico en lugar de un tipo más general en situaciones donde se espera el tipo más general.

class Animal {
  void chase(Animal x) { ... }
}

class Dog extends Animal { ... }

class Cat extends Animal {
  @override
  void chase(covariant Mouse x) { ... }
}

deferred

Palabra clave que se utiliza en la carga diferida(lazy loading). La carga diferida permite retrasar la carga de ciertas partes del código hasta que sea necesario, lo que puede mejorar el rendimiento de una aplicación al evitar la carga de código que no se utiliza inmediatamente.

import 'dart:mirrors' deferred as my_lib;

void main() async {
// Se carga de manera diferida la biblioteca 'my_lib'
await my_lib.loadLibrary();

// Se utiliza una función de la biblioteca
my_lib.someFunction();
}

dynamic

Palabra clave que se utiliza para los tipos de datos dinámicos, puede contener cualquier tipo de dato.

dynamic dynamicValue;

dynamicValue = 42;
print("Entero: $dynamicValue");

dynamicValue = "Hola, Mundo!";
print("Cadena: $dynamicValue");

dynamicValue = [1, 2, 3, 4, 5];
print("Lista: $dynamicValue");

export

Palabra reservada que se utiliza en los archivos de tipo barril, para exponer las clases en otros lugares del proyecto y se puedan importar en grupo y no todos por separado.

export 'src/cascade.dart' show Cascade;

extension

Palabra clave que se utiliza para extensiones de tipos. Las extensiones en Dart proporcionan una forma de extender tipos sin heredar de ellos.

extension StringExtension on String {
  int countVocals() {
    return this.replaceAll(RegExp(r'[^aeiouAEIOU]'), '').length;
  }
}

String myText = "Hola, Mundo!";
int counter = myText.countVocals();
print("El texto tiene $counter vocales.");

extension NumberParsing on String {
  int parseInt() {
    return int.parse(this);
  }
  // setencias
}

external

Palabra reservada que se utiliza para indicar que una función es externa.

external returnType functionName(parameters);

factory

Palabra clave que se utiliza para crear fábricas de objetos dentro de una clase. Según la documentación oficial nos indica utilizar la palabra clave factory cuando implementemos un constructor que no siempre cree una nueva instancia de su clase. Por ejemplo, un constructor de fábrica puede devolver una instancia de una caché, o puede devolver una instancia de un subtipo.

class MyClass {
  factory MyClass.fromSome(dynamic some) {
    // lógica personalizada
    return Myclass();
  }
}

class Logger {
  final String name;
  bool mute = false;

  static final Map<String, Logger> _cache = <String, Logger>{};

  factory Logger(String name) {
    return _cache.putIfAbsent(name, () => Logger._internal(name));
  }

  factory Logger.fromJson(Map<String, Object> json) {
    return Logger(json['name'].toString());
  }

  Logger._internal(this.name);

  void log(String msg) {
    if (!mute) print(msg);
    }
}

final(class)

Palabra clave aplicada a una clase significa que la clase no puede ser heredada por otras clases.

final class Animal {
  final String name;

  Animal(this.name);
}

class Dog extends Animal {
  Dog(String name) : super(name);
}

Function

La palabra clave no se utiliza para declarar funciones, sino que representa el tipo de datos de las funciones. Function es un tipo que puede referenciar cualquier función, independientemente de su firma.

int add(int a, int b) {
  return a + b;
}

Function functionAdd = add;
int result = functionAdd(3, 5);

get — set

Palabras clave que permiten crear variables de acceso de lectura(get) y escritura(set) sobre las propiedades de un objeto.

class Rectangle {
  double left, top, width, height;

  Rectangle(this.left, this.top, this.width, this.height);

  double get right => left + width;
  set right(double value) => left = value - width;
  double get bottom => top + height;
  set bottom(double value) => top = value - height;
}

implements

Palabra clave que se utiliza para implementar las interfaces en Dart.

class Shape {
double area();
}

class Rectangle implements Shape {}

import

Palabra clave que utiliza para importar clases o librerías.

import 'dart:html';

interface

Palabra clave que sirve para definir una interfaz, el extends no sirve para utilizarlas.

interface class Vehicle {
  void moveForward(int meters) {
  // setencias
  }
}

late

Palabra clave que se utiliza para declarar una variable que se inicializa después antes de usarse.

late String name;

void main() {
name = 'Pep!';
print(description);
}

library

Palabra clave se utiliza para declarar un archivo como librería.

library my_library;

void greet() {
  print('¡Hola desde la librería!');
}

class MyClass {
  // Implementación de la clase
}

void main() {
  greet();
  var instance = MyClass();
}

mixin

Palabra clave que se utiliza para definir mixins, que son unidades de código reutilizable que pueden ser combinadas con clases para agregar funcionalidades específicas.

mixin MiMixin {
  // Código del mixin
}

class MyClass with MiMixin {
  // Implementación de la clase
}

operator

Palabra clave que se utiliza para sobrecargar operadores y definir cómo se comportan en instancias de una clase personalizada.

class Add {
  int value;

  Add(this.value);

  Add operator +(Add otherValue) {
    return Add(value + otherValue.value);
  }
}

void main() {
  Add sum1 = Add(5);
  Add sum2 = Add(10);

  Add result = sum1 + sum2;

  print(result.value); // 15
}

part

Palabra clave que se utiliza en el contexto de las bibliotecas y archivos divididos para indicar que un archivo Dart es una parte de una biblioteca dividida. Es para dividir en partes el contenido de archivos.

library my_library;

part 'part_1.dart';
part 'part_2.dart';

void main() {
  print('Función principal');
}

required

Palabra clave que se utiliza en los parámetros para indicar que es obligatorio.

// child es obligatorio.
const Scrollbar({super.key, required Widget child});

sealed

Palabra clave que se utiliza para impedir que una clase sea extendida o implementada fuera de su propia biblioteca. Las clases selladas son implícitamente abstractas.

sealed class Vehicle {}

class Car extends Vehicle {}

class Truck implements Vehicle {}

class Bicycle extends Vehicle {}

// ERROR: no se puede instanciar Vehicle
Vehicle myVehicle = Vehicle();

// Car es un subtipo de vehicle y no está marcado con sealed
// por eso es posible instanciarla
Vehicle myCar = Car();

static

Palabra clave que se utiliza para declarar variables y funciones estáticos dentro de una clase. Para las variables, son útiles cuando necesitamos que sean datos constantes, ya que no se inicializan hasta que no se utilizan. Para las funciones, se pueden llamar directamente sin necesidad de crear una instancia de la clase.

class Queue {
  static const initialCapacity = 16;
  // ···
  }

  void main() {
  assert(Queue.initialCapacity == 16);
  }

class Shape {
  static void draw() {
  print('Dibujar figura ...');
  }
}

void main() {
  Shape.draw();
}

typedef

Palabra clave que se utiliza para hacer referencia a un tipo de dato.

typedef IntList = List<int>;
IntList il = [1, 2, 3];

Palabras reservadas en programación asincrónica Dart.

Son palabras clave que solo se utilizan en la programación asíncrona en Dart.

await — yield

No puede usar wait o yield como identificador en ningún cuerpo de función marcado con async, async*, o sync*.


Conclusión

Pudimos terminar de ver todas las palabras clave usadas por Dart en sus diferentes procesos, podemos con lo anterior, saber a rasgos generales en que ocasiones se pueden usar algunas de ellas.

¡Gracias por leer!

Fuentes

© 2022 - 2025 jaimetellezb - Compartir guías y tutoriales de programación.

🌱 Powered by Hugo with theme Dream.

Sobre mí

alt

Ingeniero de software

Hola, bienvenidos a mi blog sobre guías y tutoriales de programación.

Aquí podrás encontrar guías y tutoriales sobre algunos temas de tecnología en general. La idea es poder ayudar a que ciertas cosas como configuraciones de nuevas herramientas sean más fáciles de abordar y utilizar. También pequeños proyectos donde se usen diferentes tecnologías como ejemplo.

Enlaces sociales