<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] ## Hello World 每個應用都有一個main()功能。要在控制臺上顯示文本,您可以使用頂級print()功能: ~~~ void main() { print('Hello, World!'); } ~~~ ## 變量 即使在類型安全的Dart代碼中,由于類型推斷,大多數變量都不需要顯式類型: ~~~ var name = 'Voyager I'; var year = 1977; var antennaDiameter = 3.7; var flybyObjects = ['Jupiter', 'Saturn', 'Uranus', 'Neptune']; var image = { 'tags': ['saturn'], 'url': '//path/to/saturn.jpg' }; ~~~ 了解更多關于在DART變量,包括默認值,final和const關鍵字,和靜態類型。 ## 控制流程語句 Dart支持通常的控制流語句: ~~~ if (year >= 2001) { print('21st century'); } else if (year >= 1901) { print('20th century'); } for (var object in flybyObjects) { print(object); } for (int month = 1; month <= 12; month++) { print(month); } while (year < 2016) { year += 1; } ~~~ ## 函數 我們建議 指定每個函數的參數類型和返回值: ~~~ int fibonacci(int n) { if (n == 0 || n == 1) return n; return fibonacci(n - 1) + fibonacci(n - 2); } var result = fibonacci(20); ~~~ 對于包含單個語句的函數,簡寫=>(胖箭頭)語法很方便。將匿名函數作為參數傳遞時,此語法特別有用: ~~~ flybyObjects.where((name) => name.contains('turn')).forEach(print); ~~~ 除了顯示匿名函數(參數where())之外,此代碼還顯示您可以使用函數作為參數:頂級print()函數是參數forEach()。 ## 注釋 Dart評論注釋通常以//。 ~~~ // This is a normal, one-line comment. /// This is a documentation comment, used to document libraries, /// classes, and their members. Tools like IDEs and dartdoc treat /// doc comments specially. /* Comments like these are also supported. */ ~~~ ## import 要訪問其他庫中定義的API,請使用import。 ~~~ // Importing core libraries import 'dart:async'; import 'dart:math'; // Importing libraries from external packages import 'package:test/test.dart'; // Importing files import 'path/to/my_other_file.dart'; import '../lib/samples/spacecraft.dart'; ~~~ 閱讀有關Dart中的庫和可見性的更多信息,包括庫前綴,show以及hide通過deferred關鍵字延遲加載。 ## 類 這是一個具有三個屬性,兩個構造函數和一個方法的類的示例。其中一個屬性無法直接設置,因此使用getter方法(而不是變量)定義。 ~~~ class Spacecraft { String name; DateTime launchDate; // Constructor, with syntactic sugar for assignment to members. Spacecraft(this.name, this.launchDate) { // Initialization code goes here. } // Named constructor that forwards to the default one. Spacecraft.unlaunched(String name) : this(name, null); int get launchYear => launchDate?.year; // read-only non-final property // Method. void describe() { print('Spacecraft: $name'); if (launchDate != null) { int years = DateTime.now().difference(launchDate).inDays ~/ 365; print('Launched: $launchYear ($years years ago)'); } else { print('Unlaunched'); } } } ~~~ 您可以使用這樣的Spacecraft類: ~~~ var voyager = Spacecraft('Voyager I', DateTime(1977, 9, 5)); voyager.describe(); var voyager3 = Spacecraft.unlaunched('Voyager III'); voyager3.describe(); ~~~ 閱讀有關Dart中類的更多信息,包括初始化列表,可選new和const重定向構造函數, factory構造函數,getter,setter等等。 ## 繼承 Dart有單一繼承。 ~~~ class Orbiter extends Spacecraft { num altitude; Orbiter(String name, DateTime launchDate, this.altitude) : super(name, launchDate); } ~~~ 閱讀更多關于類的擴展,可選的@override注釋,等等 ## Mixins Mixins是一種在多個類層次結構中重用代碼的方法。以下類可以充當mixin: ~~~ class Piloted { int astronauts = 1; void describeCrew() { print('Number of astronauts: $astronauts'); } } ~~~ 要將mixin的功能添加到類中,只需使用mixin擴展類。 ~~~ class PilotedCraft extends Spacecraft with Piloted { // ··· } ~~~ Orbiter現在有了astronauts字段和describeCrew()方法。 ## 接口和抽象類 Dart沒有接口關鍵字。相反,所有類都隱式地定義一個接口。因此,您可以實現任何類。 ~~~ class MockSpaceship implements Spacecraft { // ··· } ~~~ 您可以創建一個抽象類,由一個具體類擴展(或實現)。抽象類可以包含抽象方法(帶有空主體)。 ~~~ abstract class Describable { void describe(); void describeWithEmphasis() { print('========='); describe(); print('========='); } } ~~~ 任何類擴展描述都有describe()方法,它調用extender的describe()實現。 ## 異步 避免回調地獄,并通過使用異步和wait使代碼更具可讀性。 ~~~ const oneSecond = Duration(seconds: 1); // ··· Future<Null> printWithDelay(String message) async { await Future.delayed(oneSecond); print(message); } ~~~ 上述方法相當于: ~~~ Future<Null> printWithDelay(String message) { return Future.delayed(oneSecond).then((_) { print(message); }); } ~~~ 如下一個示例所示,async和await會幫助使異步代碼易于閱讀。 ~~~ Future<Null> createDescriptions(Iterable<String> objects) async { for (var object in objects) { try { var file = File('$object.txt'); if (await file.exists()) { var modified = await file.lastModified(); print( 'File for $object already exists. It was modified on $modified.'); continue; } await file.create(); await file.writeAsString('Start describing $object in this file.'); } on IOException catch (e) { print('Cannot create description for $object: $e'); } } } ~~~ 您還可以使用async*,它提供了一種很好的、可讀的方式來構建流。 ~~~ Stream<String> report(Spacecraft craft, Iterable<String> objects) async* { for (var object in objects) { await Future.delayed(oneSecond); yield '${craft.name} flies by $object'; } } ~~~ ## 異常 要引發異常,使用throw: ~~~ if (astronauts == 0) { throw StateError('No astronauts.'); } ~~~ 要捕獲異常,使用帶有on或catch(或兩者)的try語句: ~~~ try { for (var object in flybyObjects) { var description = await File('$object.txt').readAsString(); print(description); } } on IOException catch (e) { print('Could not describe object: $e'); } finally { flybyObjects.clear(); } ~~~ 注意,上面的代碼是異步的;嘗試在異步函數中同時工作同步代碼和代碼。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看