typestar

grade_report.dart en Dart

Boletines desde un roster const, una expresión switch y relleno.

// Average each student's scores and print a letter-grade report card.

class Student {
  final String name;
  final List<int> scores;
  const Student(this.name, this.scores);

  double get average =>
      scores.fold(0, (sum, s) => sum + s) / scores.length;
}

const roster = [
  Student('Ada', [92, 88, 97]),
  Student('Grace', [84, 91, 78]),
  Student('Alan', [70, 66, 74]),
  Student('Edsger', [58, 67, 61]),
];

String letter(double avg) => switch (avg) {
      >= 90 => 'A',
      >= 80 => 'B',
      >= 70 => 'C',
      >= 60 => 'D',
      _ => 'F',
    };

void main() {
  final sorted = [...roster]..sort((a, b) => a.name.compareTo(b.name));
  print('student  avg grade');
  for (final s in sorted) {
    final name = s.name.padRight(8);
    final avg = s.average.toStringAsFixed(1).padLeft(4);
    print('$name $avg  ${letter(s.average)}');
  }
  final all = roster.expand((s) => s.scores).toList();
  final classAvg = all.fold(0, (sum, s) => sum + s) / all.length;
  print('Class average: ${classAvg.toStringAsFixed(1)}');
}

Cómo funciona

  1. Student calcula su average con un getter de fold.
  2. letter mapea promedios a calificaciones con patrones relacionales.
  3. expand junta cada puntaje para el promedio del curso.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
38
Caracteres a escribir
954
Tokens
341
Ritmo de tres estrellas
65 tpm

Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 315 segundos.

Escribe este fragmento

Paso 2 de 3 en Bis; paso 26 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →