[Flutter]アンダースコア多すぎない?って思ってたら仕様でしたっていう話

ざっくりまとめ。

  • あちらこちらにアンダースコア(_)...大杉
    • 変数になら慣習的につける言語あるけど...
  • Dart の言語仕様でした
    • アンダースコア(_)をつけると、同ライブラリのみで参照可能になる

です。

環境

  • Flutter v0.8.2
  • Dart v2.1.0

アンダースコア(_)大杉

サンプルとか見ていると、やたらめったらアンダースコア(_)が出てくる。
private変数の命名で慣習的につける言語もあるから、ソレなんだろうな〜
ぐらいにおもっていたのですけど...
変数どころか、メソッドにも...はてはクラスにもついている...

class Foo {
  int _counter = 0;  // これはなじみがある
  
  void _method() {   // オッ
    // somthing...
  }
}

class _Bar {  // ファッ!?
}

みたいな(笑)
普段、アンダースコアつけないオジサンとしては、もう違和感がすごくて...
なんだこいつら...信者か何かかなんか。。とか思ってました

言語仕様でした

気になって調べてみたら、Dart の言語仕様でした😅

Unlike Java, Dart doesn’t have the keywords public, protected, and private. If an identifier starts with an underscore (_), it’s private to its library. For details, see Libraries and visibility.

Java のように public とかない。けど、アンダースコア(_)で始めると、そのライブラリ内だけで参照できるように制限できる。

どうやら、アンダースコア(_)で始めるとアクセスレベルの制限が実際にできるみたい。
(慣習とかじゃなかった(笑))
Swiftfileprivate に近い感じです。

わかってしまえば...

慣習的につけてるんだとしたら、「よろしいならば戦争だ!」となるけれど、
言語仕様だとわかると、若干の違和感はありつつもそれなりに受け入れられるので不思議ですね。。。😇
(なら、仕方ないっていう諦めの作用か...)

参考

Important concepts - Language Tour | Dart