まず最初に英語で書いてから日本に訳すという方法で書いてみた。何か違いが出るだろうか。
Dartはoptional typeを採用している。ある変数に代入できない型を代入しようとした場合、静的型警告が発せられる。ただし、プロダクションモードで実行された場合は、実行に何の影響も及ぼさない。
int x = "hello" ; // static type warning
では、代入可能とは一体何か。どのように定義されているのか。13.4 Interface Typesで定義されている。
型Tが型Sに代入可能である場合、すなわち、s = t でtの型がTでありsの型がSである場合というのは、
-
TはSである。
int s = 0 ;
これは当然だ。.
-
Tはnullである。
int s1 = null ;
nullは、⊥という特別な型を持っている。これは、どんな型にも代入可能である。
-
TかS、あるいはその両方がDynamicであるとき。
void main() { var s1 = 0 ; s1 = 0.0 ; s1 = "hello" ; var d = 0 ; double s2 = d ; }
動的型intを持つdを静的型doubleを持つs2に代入しているが、これは代入可能である。したがって、static type warningは発せられない。確かに、実行時には型の不一致を起こすが、それは実行時にしか分からないので、静的警告は発しようがない。
-
SとTがジェネリック型I<...>であり、Tの型パラメーターが、それぞれSの対応する型パラメーターに代入可能な時。
void main() { List<int> = <int>[] ; List<num> = <int>[] ; List = [ ] ; // List<Dynamic> }
No comments:
Post a Comment
You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.