オブジェクトのクラスを動的に判定するには (instanceof) 2015/10/09
あるインスタンスが特定のクラスのインスタンスかどうかを判定する方法。
Java 2016/06/17
instanceof
という演算子を使う。(長いけどメソッドとかではなくて演算子だ)
Object obj = ...;
if (obj instanceof Integer) {
...;
}
instanceof
はインターフェースに対しても使える。
Scala 2014/10/16
Javaで instanceof
キーワードに相当することをするには、isInstanceOf
という Any
クラスのメソッドを呼び出す。
val obj = ...;
if (obj.isInstanceOf[Int]) {
...;
}
JVM的に本当に isInstanceOf
というメソッドがあるのではなく、
Javaのinstanceof
キーワードと同じようにコンパイルされるのだと思う、たぶん。
ただ、isInstanceOf
メソッドを使うのではなく、match
式を使うほうがScalaらしい。
PHP 2015/10/09
instanceof
という演算子を使う。
if ($obj instanceof MyClass) {
...;
}
instanceof
はインターフェースに対しても使える。
配列かどうかを判定するには is_array
という関数を使う。
if (is_array($obj)) {
...;
}
整数型かどうかを判定するには is_int
という関数を使う。
$x = "1";
var_export(is_int($x)); // => false
$x = 1;
var_export(is_int($x)); // => true
同様の関数
is_bool
- 論理型かどうか
is_int
- 整数型かどうか
is_float
- 浮動小数点数型かどうか
is_string
- 文字列型かどうか
is_array
- 配列かどうか
Python 2014/09/13
isinstance
という関数でクラスを判定できる。
print(isinstance(100, int)) # True
print(isinstance(3.14, int)) # False
print(isinstance(100, float)) # False
print(isinstance(3.14, float)) # True
print(isinstance(False, bool)) # True
print(isinstance(True, bool)) # True
print(isinstance(False, int)) # True
print(isinstance(True, int)) # True
print(isinstance("foo", str)) # True
Ruby 2014/06/29
is_a?
メソッドを使うとクラスを判定できる。
num.is_a?(Integer) # 整数かどうか
str.is_a?(String) # 文字列かどうか
arr.is_a?(Array) # 配列かどうか
hash.is_a?(Hash) # ハッシュかどうか
例
x = 1
p x.is_a?(Integer) # => true
p x.is_a?(Float) # => false
x = 1.0
p x.is_a?(Integer) # => false
p x.is_a?(Float) # => true
Perl 2014/03/06
スカラ/配列/ハッシュの区別は、変数名の先頭の1文字(sigil)で区別されるので、プログラムの中で動的に判定が必要となるケースはない。
スカラが、なんらかの値なのか、レファレンスなのかの区別や、レファレンスであれば指す先の種類は、ref
という関数(?)で判定できる。レファレンスでない場合は ''
を返し、レファレンスの場合はその指す先のオブジェクトの種類を文字列で返す。
my $num = 1;
my $str = "abc";
my @arr = (1, 2, 3);
my %hash = (a => 1, b => 2);
sub func {
...;
}
print (ref $num eq ''); # => 1
print (ref $str eq ''); # => 1
print (ref @arr eq ''); # => 1
print (ref %hash eq ''); # => 1
print (ref &func eq ''); # => 1
my $ref_arr = [1, 2, 3];
my $ref_hash = {a => 1, b => 2};
my $ref_func = sub { print "Hello\n"; };
print (ref $ref_arr); # => ARRAY
print (ref $ref_hash); # => HASH
print (ref $ref_func); # => CODE
JavaScript 2016/06/17
プリミティブ型を判定するには typeof
という演算子を使う。結果を文字列で得られる。
var i = 100;
var f = 3.14;
var b = true;
var s = "foo";
var a = [10, 20, 30];
console.log(typeof i); // => number
console.log(typeof f); // => number
console.log(typeof b); // => boolean
console.log(typeof s); // => string
console.log(typeof a); // => object
console.log(typeof null); // => object
console.log(typeof undefined); // => undefined
オブジェクトのクラスを判定するには instanceof
という演算子を使う。
console.log(s instanceof Array); // => false
console.log(a instanceof Array); // => true
console.log(null instanceof Array); // => false
console.log(undefined instanceof Array); // => false