数値の比較演算子

==, != で等値性を判定でき、<, <=, >, >= で大小を比較できる言語が多い。

また、RubyやPerlには <=> という演算子がある。大小関係により -101 を返す。

Go言語 (golang)

整数同士や浮動小数点数同士は ==, != で等値性を判定でき、 <, <=, >, >= で大小を比較できる。

整数と浮動小数点を直接比較することはできず、キャストして型を合わせる必要がある。

Java

プリミティブ型の数値は ==, != で等値性を判定でき、 <, <=, >, >= で大小を比較できる。

プリミティブ型以外の数値のオブジェクトの比較は専用のメソッドを使う。

Signature:

// java.lang.Integer
int compareTo(Integer another)

// java.lang.Double
int compareTo(Double another)

Scala

==, != で等値性を判定でき、 <, <=, >, >= で大小を比較できる。

Javaと違い、プリミティブ型というのがなくすべてオブジェクトであるが、数値を表すオブジェクトはだいたい上記の演算子が使えるようになってるので、 compareTo のようなメソッドを使うことはない。

すべてがオブジェクトであるので、 <, <=, >, >= に関しては厳密には演算子ではなく < などの名前のメソッドが数値のオブジェクトに存在することになっている。従って a < ba.<(b) とも書ける。読みづらいのでこんな書き方は普通はしないが。

< などの記号にかぎらず、普通の名前のメソッドであっても、引数が1つだけの場合はメソッド呼び出し時にドットと括弧を省略して演算子のように書ける。これを中置記法という。中置記法だと左右が対等に見えるので、自分はリストに対するzipメソッドだとかは、よくこの書き方をする。

JVM上でプリミティブ型にならないオブジェクトに対しての ==, != は実際には equals メソッドが呼び出されている。

Groovy

==, != で等値性を判定でき、 <, <=, >, >= で大小を比較できる。

<=> という、-1, 0, +1 のいずれかを返す演算子もある。

a <=> b

と書くと、 a の方が小さければ、-1 を返し、大きければ 1 を返し、等しければ 0 を返す。 RubyやPerlにも同様のものがある。

PHP

==, != で等値性を判定でき、 <, <=, >, >= で大小を比較できる。

!= の代わりに <> と書いても同じ。

=== は等値でかつ同じ型(文字列と数値ではなく、数値同士など)の場合にのみtrueとなる。 !== は等値でないか、または違う型(文字列と数値など)の場合にtrueとなる。

<, <=, >, >= は片方または両方を文字列にした場合に、それを数値に変換してから比較する。文字列通しを文字列として比較するにはstrcmp関数を使う。

var_export(200   < 23  ); echo "\n"; // => false
var_export(200   < '23'); echo "\n"; // => false
var_export('200' < 23  ); echo "\n"; // => false
var_export('200' < '23'); echo "\n"; // => false
var_export(200   > 23  ); echo "\n"; // => true
var_export(200   > '23'); echo "\n"; // => true
var_export('200' > 23  ); echo "\n"; // => true
var_export('200' > '23'); echo "\n"; // => true

// 数字にできない文字列は 0 に変換されてから比較
var_export(200   > 'a' ); echo "\n"; // => true
var_export(200   < 'a' ); echo "\n"; // => false

PHP7からはRubyやPerlなどにある <=> という演算子が使えるようになった。 -1, 0, 1 のいずれかを返す。

var_export(200   <=> 23);    echo "\n"; // => 1
var_export(23    <=> 200);   echo "\n"; // => -1
var_export(200   <=> '23');  echo "\n"; // => 1
var_export('200' <=> 23);    echo "\n"; // => 1
var_export('200' <=> '23');  echo "\n"; // => 1
var_export(200   <=> 200);   echo "\n"; // => 0
var_export('200' <=> 200);   echo "\n"; // => 0
var_export('200' <=> '200'); echo "\n"; // => 0

よくわからないがPHPでは <=> のことを宇宙船というらしい。

比較演算子 | PHP Manual
http://php.net/manual/ja/language.operators.comparison.php

Python

==, != で等値性を判定でき、 <, <=, >, >= で大小を比較できる。

Python2では != の代わりに <> と書いても同じだが、これは古い書き方で、 Python3では <> を使えない。

a < b < c というような書き方ができ、a < b and b < c の意味になる。 a < b > c という書き方も文法上はできて、a < b and b > c の意味になるが、わかりづらいだけである。

<, <=, >, >= を文字列やリストなどのシーケンス型に使うと、各要素同士を比較して、辞書的に比較をする。ディクショナリ同士も比較できる。

比較演算子 | Python 2.7 documentation
http://docs.python.jp/2/reference/expressions.html#comparison

比較演算子 | Python 3 documentation
http://docs.python.jp/3/reference/expressions.html#not-in

Ruby

==, != で等値性を判定でき、 <, <=, >, >= で大小を比較できる。

<=> という、-1, 0, +1 のいずれかを返す演算子もある。

a <=> b

と書くと、 a の方が小さければ、-1 を返し、大きければ 1 を返し、等しければ 0 を返す。 Perlにも同様のものがある。

Perl

==, != で等値性を判定でき、 <, <=, >, >= で大小を比較できる。

<=> という、-1, 0, +1 のいずれかを返す演算子もある。

a <=> b

と書くと、 a の方が小さければ、-1 を返し、大きければ 1 を返し、等しければ 0 を返す。Rubyにも同様のものがある。

数値ではなく文字列として比較したい場合は eq, ne, gt, ge, lt, le を使う。 <=> に対応する文字列としての比較演算子は cmp である。

sh (シェルスクリプト)

test コマンド([ コマンド)の -eq, -ne, -lt, -le, -ge, -gt で数値として比較する。 test コマンド([ コマンド)の =, != 演算子は文字列として比較してしまい、Perlとは逆。 <, > はシェルスクリプトではリダイレクトになってしまう。

if [ $a -lt $b ]; then
    # $a が $b よりも小さい場合
    ...
fi

-> シェルスクリプトの演算子

JavaScript

==, != で等値性を判定でき、 <, <=, >, >= で大小を比較できる。

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。