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
Studentcalcula suaveragecon un getter defold.lettermapea promedios a calificaciones con patrones relacionales.expandjunta cada puntaje para el promedio del curso.
Palabras clave y builtins usados aquí
Stringclassconstdoublefinalforgetinintswitchthisvoid
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.
Paso 2 de 3 en Bis; paso 26 de 27 en Fundamentos del lenguaje.