| // Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'dart:async'; |
| import 'dart:core'; |
| import 'dart:html'; |
| |
| void main() { |
| // for evaluation |
| Timer.periodic(const Duration(seconds: 1), (_) { |
| printSimpleLocalRecord(); |
| printComplexLocalRecord(); |
| printNestedLocalRecord(); |
| printSimpleNamedLocalRecord(); |
| printComplexNamedLocalRecord(); |
| printNestedNamedLocalRecord(); |
| print('Patterns'); // Breakpoint: callTestPattern1 |
| testPattern(['a', 1]); |
| testPattern([3.14, 'b']); |
| testPattern([0, 1]); |
| testPattern2(); |
| print('Classes'); |
| testClass(); |
| }); |
| |
| document.body!.appendText('Program is running!'); |
| } |
| |
| void printSimpleLocalRecord() { |
| final record = (true, 3); |
| print(record); // Breakpoint: printSimpleLocalRecord |
| } |
| |
| void printSimpleNamedLocalRecord() { |
| final record = (true, cat: 'Vasya'); |
| print(record); // Breakpoint: printSimpleNamedLocalRecord |
| } |
| |
| void printComplexLocalRecord() { |
| final record = (true, 3, {'a': 1, 'b': 5}); |
| print(record); // Breakpoint: printComplexLocalRecord |
| } |
| |
| void printComplexNamedLocalRecord() { |
| final record = (true, 3, array: {'a': 1, 'b': 5}); |
| print(record); // Breakpoint: printComplexNamedLocalRecord |
| } |
| |
| void printNestedLocalRecord() { |
| final record = (true, (false, 5)); |
| print(record); // Breakpoint: printNestedLocalRecord |
| } |
| |
| void printNestedNamedLocalRecord() { |
| final record = (true, inner: (false, 5)); |
| print(record); // Breakpoint: printNestedNamedLocalRecord |
| } |
| |
| void testClass() { |
| final greeter = GreeterClass(greeteeName: 'Charlie Brown'); |
| greeter.sayHello(); |
| } |
| |
| String testPattern(Object obj) { |
| switch (obj) { |
| case [var a, int n] || [int n, var a] when n == 1 && a is String: |
| return a.toString(); // Breakpoint: testPatternCase1 |
| case [double n, var a] || [var a, double n] when (n - 3.14).abs() < 0.001: |
| return a.toString(); // Breakpoint: testPatternCase2 |
| default: |
| return 'default'; // Breakpoint: testPatternDefault |
| } |
| } |
| |
| String testPattern2() { |
| final dog = 'Prismo'; |
| final cats = ['Garfield', 'Tom']; // Breakpoint: testPattern2Case1 |
| final [firstCat, secondCat] = cats; |
| print(firstCat); // Breakpoint: testPattern2Case2 |
| return '$dog, $firstCat, $secondCat'; |
| } |
| |
| class GreeterClass { |
| final String greeteeName; |
| final bool useFrench; |
| |
| GreeterClass({ |
| this.greeteeName = 'Snoopy', |
| this.useFrench = false, |
| }); |
| |
| void sayHello() { |
| useFrench ? greetInFrench() : greetInEnglish(); |
| } |
| |
| void greetInEnglish() { |
| print('Hello $greeteeName'); // Breakpoint: testClass1Case1 |
| } |
| |
| void greetInFrench() { |
| print('Bonjour $greeteeName'); |
| } |
| } |