/**
 * Klasy wywoływane
 */
class ShouldWriteAProgram { // to jest prosta klasa
  String language;
  String platform;

  ShouldWriteAProgram(this.language, this.platform);

  // ta specjalna metoda o nazwie 'call' sprawia, że ​​klasa zachowuje się jak funkcja
  bool call(String category) {
    if(language == "Dart" && platform == "Flutter") {
      return category != "todo";
    } 
    return false;
  }
 }

main() {
  var shouldWrite = ShouldWriteAProgram("Dart", "Flutter");
    
  print(shouldWrite("todo")); 
  // ta funkcja wywołuje klasę wywoływalną ShouldWriteAProgram
  // co skutkuje niejawnym wywołaniem metody "call"

  Function shouldWriteFunction = shouldWrite;
  print(shouldWriteFunction("todo")); // taki sam wynik
  
}
