2012-12-14 12 views

Odpowiedz

42

Dart nie ma pojęcia przestrzeni nazw, ale zamiast tego ma biblioteki. Można uznać bibliotekę za równoważną przestrzeni nazw, ponieważ biblioteka może składać się z wielu plików i zawierać wiele klas i funkcji.

Prywatność w Dart jest również w bibliotece, a nie na poziomie klasy (cokolwiek przedrostka z podkreśleniem jest prywatne dla tej biblioteki).

Przykładem definiowania bibliotekę (używając przykładem użyteczności biblioteki.

// utilities.dart 
library utilities; // being the first statement in the library file 

można wprowadzić inne pliki część tej samej biblioteki za pomocą słowa kluczowego part plików części są wykorzystywane wyłącznie w celu zorganizowania Twój kod, możesz umieścić wszystkie swoje klasy w jednym pliku biblioteki lub podzielić je na kilka plików części (lub plików części i pliku biblioteki) - nie ma to wpływu na wykonanie, jest stylistyczne, aby umieścić główny plik biblioteki folder nadrzędny i pliki części w folderze src/.

Poszerzenie exampl e, aby wyświetlić pliki części.

// utilities.dart 
library utilities; 

part "src/string_utils.dart"; 
part "src/date_utils.dart"; 

tych plików częściowych następnie połączyć z powrotem do biblioteki są częścią za pomocą komunikatu part of:

// src/string_utils.dart 
part of utilities; 

// functions and classes 
String reverseString(s) => // implementation .... 

String _stringBuilder(strings) => // a private (to the library) function, 
            // indicated by the leading underscore 

//... snip other classes and functions 

Teraz masz biblioteki zawierającej funkcję, można skorzystać z tej biblioteki gdzie indziej przez import ing bibliotekę:

// my_app.dart; 
import "path/to/library/utilities.dart"; 

main() { 
    var reversed = reverseString("Foo"); 
    // _stringBulider(["a","b"]); // won't work - this function is 
           // only visible inside the library 
} 

Jeśli chcesz alias bibliotekę, aby uniknąć kolizji (gdzie można importować dwie biblioteki, zarówno zawierających reverseString() funkcji, należy użyć as kluczowe:

// my_app.dart; 
import "path/to/library/utilities.dart"; 
import "some/other/utilities.dart" as your_utils; 

main() { 
    var reversed = reverseString("Foo"); 
    var your_reversed_string = your_utils.reverseString("Bar"); 
} 

Oświadczenie import również korzysta z pakietów, jak importować pubie, menedżer pakietów DART, więc można również zorganizować swoją bibliotekę na github lub gdzie indziej, odwoływać się do biblioteki jako tak:

// my_app.dart; 
import "package:utilities/utilities.dart"; 

main() { 
    var reversed = reverseString("Foo");   
} 

zależność pub jest zdefiniowana w pliku pubspec.yaml, który mówi pub, gdzie można znaleźć bibliotekę. Możesz dowiedzieć się więcej na pub.dartlang.org

Ważne jest, aby pamiętać, że tylko plik biblioteki mogą:

  • zawierać import oświadczenia. Pliki części nie mogą.
  • zawierają słowo kluczowe library. Pliki części nie mogą.
  • zawierają pliki part. Pliki części nie mogą.

Jeden punkt końcowy jest taki, że runnable app plik może (i prawdopodobnie będzie) plik biblioteki, a także może być wykonana z plików części

// my_app.dart; 
library my_app; 

import "package:utilities/utilities.dart"; 

part "src/edit_ui.dart"; 
part "src/list_ui.dart"; 
part "src/foo.dart"; 

main() { 
    var reversed = reverseString("Foo");  
    showEditUi(); // perhaps defined in edit_ui.dart....? 
} 
+0

Należy zauważyć, że użycie 'udział "dyrektywa jest zniechęcona. * "Uwaga: Być może słyszałeś o dyrektywie dotyczącej części, która pozwala dzielić bibliotekę na wiele plików Dart. Zalecamy, aby unikać używania części i tworzyć mini biblioteki." * - https: //www.dartlang. org/guides/libraries/create-library-packages – Subfuzion