Last active
June 14, 2020 07:53
-
-
Save xamantra/f70d8af6edb3bd5a0da4b2e299faebd4 to your computer and use it in GitHub Desktop.
A small script to compare dart's "foo is T" and "runtimeType" type checks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Type type<T>() => T; | |
class Settings { | |
// logic here ... | |
} | |
class ASettings extends Settings { | |
// logic here ... | |
} | |
class BSettings extends ASettings { | |
// logic here ... | |
} | |
var _settings = Settings(); | |
var _aSettings = ASettings(); | |
var _bSettings = BSettings(); | |
void main() { | |
print('using "foo is T":\n'); | |
fooIsT(); | |
print('\n\nusing "runtimeType == Type":\n'); | |
objectRuntimeType(); | |
} | |
void fooIsT() { | |
print('$Settings is $ASettings => ${_settings is ASettings}'); | |
print('$ASettings is $Settings => ${_aSettings is Settings}'); | |
print('$Settings is $BSettings => ${_settings is BSettings}'); | |
print('$BSettings is $Settings => ${_bSettings is Settings}'); | |
print('$ASettings is $BSettings => ${_aSettings is BSettings}'); | |
print('$BSettings is $ASettings => ${_bSettings is ASettings}'); | |
} | |
void objectRuntimeType() { | |
print('$Settings == $ASettings => ${_settings.runtimeType == type<ASettings>()}'); | |
print('$ASettings == $Settings => ${_aSettings.runtimeType == type<Settings>()}'); | |
print('$Settings == $BSettings => ${_settings.runtimeType == type<BSettings>()}'); | |
print('$BSettings == $Settings => ${_bSettings.runtimeType == type<Settings>()}'); | |
print('$ASettings == $BSettings => ${_aSettings.runtimeType == type<BSettings>()}'); | |
print('$BSettings == $ASettings => ${_bSettings.runtimeType == type<ASettings>()}'); | |
print('\ncorrect types:\n'); | |
print('$Settings == $Settings => ${_settings.runtimeType == type<Settings>()}'); | |
print('$ASettings == $ASettings => ${_aSettings.runtimeType == type<ASettings>()}'); | |
print('$BSettings == $BSettings => ${_bSettings.runtimeType == type<BSettings>()}'); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
using "foo is T":
Settings is ASettings => false
ASettings is Settings => true
Settings is BSettings => false
BSettings is Settings => true
ASettings is BSettings => false
BSettings is ASettings => true
using "runtimeType == Type":
Settings == ASettings => false
ASettings == Settings => false
Settings == BSettings => false
BSettings == Settings => false
ASettings == BSettings => false
BSettings == ASettings => false
correct types:
Settings == Settings => true
ASettings == ASettings => true
BSettings == BSettings => true