2013年06月29日

Dartにおけるライブラリの作り方

Dartでライブラリづくり、ぶっちゃけよゆーだろーとか思ってたら全力で躓いたのでメモ。

ふえぇ・・・もう何も信じられないよぉ・・・状態に陥ったがおさんの苦悩の数時間をダイジェストバージョンでお楽しみくださいませ。


で、ですねまずはgoogleで検索したんですよ。
「Dart ライブラリ」[検索]

結果、色々書いてあるサイトをいくつか見つけまして、それにはこう書いてあったのです。

@ライブラリの核となるファイルに#library("ライブラリ名");を先頭につける
Aライブラリ内で別のファイルを#source("別のファイル.dart");でインクルードできる
B呼び出す側のファイルには#import("ライブラリ名");で呼び出せる

こんな感じのことです。詳しくは「ここらへんで



しかし、これが悲劇の始まりでした。

がお氏「じゃーさっそく使ってみよー!」
がお氏「あれれ???コンパイルエラー吐きまくってるよ???10個ぐらい吐いちゃってるよ???
がお氏「でも書き間違いとかではないなーどういうことだろおーーーー??????(既に死亡)」


最初はさっぱり分からず、しかしほかのサイトを読んでも同じ事ばかり書いてある。どういうことだ。
<2時間経過>
もしかして、海外のサイトならそれっぽい理由とか書いてるんじゃないかなっ
[dart library][検索][日本語のサイトのみを表示 を解除]

なるほど、これか。

この質問投稿者、確実にソースコード書き間違えちゃってるところがあるのですが、それを無視して有能な回答者の意見を読むと、なんと

「この間文法変わっちゃったんで、最新のDartEditor使ってるんなら、書き方変えてね☆」

とのこと。ふざけんな。

というわけで、今はこう書けばいいらしい。

@ライブラリの核となるファイルに「library ライブラリ名;」を先頭につける。ライブラリ名は文字列ではない(クォーテーションマークで括らない) && 非ファイル名なので注意。
Aライブラリ内で別のファイルを「part "別のファイル.dart";」でインクルードできる。こちらは文字列 && ファイル名指定(拡張子込み)
B呼び出す側のファイルには「import "ライブラリの核となるファイル.dart" as ○○;」で呼び出せる。ライブラリの核となるファイルの中は単にライブラリ名だったが、これはファイル名指定である
Cそして更に追加されたものが。先ほどの「part ○○」で呼び出された側の別のファイルの先頭には「part of ライブラリ名」という指定が必要になった。ここはライブラリ名である。

とまあ文字にするとかなーりごちゃごちゃごちゃごちゃしていますが、そんな感じです。



具体例を示すと

[main.dart]

import "gaolib.dart" as gLib; //gaolib.dartはgLibという名前空間に入れるという意味

void main(){
new gLib.Hello(); //gLib.Hello()でクラスが呼べる。新しいがおだよ〜
}


[gaolib.dart]

library gaolib; //ライブラリ名はgaolibということで。これはpartで外部ファイルを呼び出すときに使う通名。
part "hello.dart"; //外部からhello.dartを呼び出す。もちろんこのファイルに直接クラスを記述してもいい(ごちゃごちゃするけど)


[hello.dart]

part of gaolib; //ライブラリ名を指定して、どのライブラリに属するかを明確化する。
class Hello{
Hello(){
print("コンストラクタ呼ばれたっ");
}
}



こんな構造です。ややこしややこし。
しかし、それぞれのファイルの先頭を見れば、そのファイルの構造がばしっと見えるという点では、わかりやすいのかなー?書く時混乱して死ぬけど。

そしてライブラリとか外部ファイル化とかって割と重要な部分だと思うんだけど、現時点でどの日本語のサイトにもこの仕様変更について言及(or解説)していないというのは、わりと問題なのでは
posted by がお at 03:03| Comment(0) | Dart | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。