Skip to content

Instantly share code, notes, and snippets.

@xamantra
Last active June 14, 2020 07:53
Show Gist options
  • Save xamantra/f70d8af6edb3bd5a0da4b2e299faebd4 to your computer and use it in GitHub Desktop.
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
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>()}');
}
@xamantra
Copy link
Author

xamantra commented Jun 14, 2020

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment