Skip to content

Instantly share code, notes, and snippets.

@kranfix
Last active March 22, 2020 18:33
Show Gist options
  • Save kranfix/bda7024a78cf0b819028b1435a5ed735 to your computer and use it in GitHub Desktop.
Save kranfix/bda7024a78cf0b819028b1435a5ed735 to your computer and use it in GitHub Desktop.
Dart: Inheritance issues
// Reference: https://talks.golang.org/2014/go4java.slide#41
// DartPad: https://dartpad.dev/bda7024a78cf0b819028b1435a5ed735
// Gist: https://gist.github.com/kranfix/bda7024a78cf0b819028b1435a5ed735
void main() {
const List<Task> tasks = [Task("one"), Task("two"), Task("three")];
final runner = ExtendedRunCounter("My run counter");
//final runner = ComposedRunCounter("My run counter");
runner.runAll(tasks);
print("${runner.name} ran ${runner.count} tasks");
}
//void printd(Object object) => print(object);
void printd(Object object) => null;
class Task {
final String key;
const Task(this.key);
run() => print("Running task $key");
}
class Runner {
final String name;
Runner(this.name);
void run(Task task){
printd("[$runtimeType($name).run]");
task.run();
}
void runAll(List<Task> tasks){
printd("[$runtimeType($name).runAll]");
for(final task in tasks){
run(task);
}
}
}
class ExtendedRunCounter extends Runner {
ExtendedRunCounter(String name) : _count = 0, super(name);
int _count;
int get count => _count;
@override
void run(Task task){
printd("[$runtimeType($name).run]");
_count++;
super.run(task);
}
@override
void runAll(List<Task> tasks){
printd("[$runtimeType($name).runAll]");
_count += tasks.length;
super.runAll(tasks);
}
}
class ComposedRunCounter {
ComposedRunCounter(String name) : _count = 0, _runner = Runner(name);
int _count;
int get count => _count;
Runner _runner;
String get name => _runner.name;
void run(Task task){
printd("[$runtimeType($name).run]");
_count++;
_runner.run(task);
}
void runAll(List<Task> tasks){
printd("[$runtimeType($name).runAll]");
_count += tasks.length;
_runner.runAll(tasks);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment