わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

「同じ」と「等しい」の違い:プログラミングの観点から

「同じ」と「等しい」という2つの言葉について,使われ方に違いがあると学んだのは,中学1年のとき,学校でもらったドリルの解説だったと記憶しています.実際の文言は覚えていません.例えば,「3a+1」と「a+5」は,「同じ」ではありませんが,これらが「等しい」ときのaの値を求めるとなれば,3a+1=a+5と,等号で結び,一元一次方程式を解く知られた手順により,a=2を得ることができます*1
「同じ」と「等しい」の違いに関して,Webでざっと調べて見つけた情報を,並べていきます.

1. 「同じ」と「等しい」の違いは何ですか? - Yahoo!知恵袋

(ベストアンサー以外の回答)
「水1Lと油1Lは等しい」はわかんなくもないけど「水1Lと油1Lはおなじ」とはいわないしね。
だから「等しい」は、2つのもののある部分に注目して、そこだけ(量や形や合計)がおなじ、って感じなんだけど、「おなじ」は何から何までおんなじだってことをあらわしてることが多いんじゃないかな(*^^*)

2. 同じ(おなじ)の意味 - goo国語辞書

[用法]おなじ・[用法]ひとしい――「訪ねてきたのは昨日と同じ人だった」「彼のカバンは私のと同じだ」のように、人や物、あるいは種類・性質などに相違点がない場合には「同じ」を用い、「等しい」とはいわない。◇これに対して「児戯に等しい」「詐欺にも等しい行為」など、異質のものでも状態・様子が互いに非常によく似ているときに、「等しい」が用いられる。◇「同じ(等しい)圧力を加える」「AとBとは長さが同じ(等しい)」などのように、物理的・数量的に同一の場合には相通じて用いられるが、物理学・数学などでは多く「等しい」を使う。

3. 久田隆基: 中学校理科教科書における「一定」,「同じ」,「等しい」のような用語の使われ方, 日本教科教育学会誌, Vol.6, No.1, pp.43-53 (1981). https://doi.org/10.18993/jcrdajp.6.1_43

「同じ」を国語辞典で調べてみると,大別して2つの意味に使われ,次のE,Fの意味に要約できると思われる。
意味E:「あれとこれと比べてかわりがない」という意味。
この意味で使われる「同じ」は二者又は多者間での同一性,同等性を表す場合に用いられ,ごく普通に使われる意味である。
意味F:「別のものではなく,1つのもの」という意味。

「等しい」は「一定」と同じように,話しことばとしてはあまり使われないが,科学的記述にはよく用いられる用語である。「等しい」の意味は国語辞典を調べてみても,「同じ」とよく似ているし,「等しい」と「同じ」の使い方の違いも判然としない。国語辞典の解説も参考にして,教科書の用例から「等しい」の意味をまとめてみると,次のG,Hの2つの意味に大別できると思われる。
意味G:「同じ」の意味Eとほぼ同義で,「あれとこれと比べてみて同じである」という意味。
意味H:価値的な側面に重点を置いた「同価値」,「つりあっている」という意味。

「等しい」の用例別出現数と意味別使用数を示した表4において,用例別に「等しい」の使い方をみてみると,ごく少数の例を除いて,「等しい」の主体となっている語は数量用語である。このことは「同じ」が数量用語,非数量用語の別なく,同一性,同等性を示すのに使われるのに対し,「等しい」は数量用語の程度や量の同一性,同等性を示す場合に使われているということであり,「等しい」と「同じ」の使い方の違いを明確に表していると思われる。(以下略)

4. (数学)「等しい」と「同じ」 - もう一人のY君

「等しい」についてはさておくとして, 数学における「同じ」とは何か.
早々に結論を言ってしまえば, これは「同値であること」と言えます.
同値, 実際には「同値関係」であるとは「ある意味で等しい」, 或いは「同一視できる」という, 「等しい」よりも緩い関係を指します.


プログラムを自分で書いたり,プログラミングの授業に携わったりしているときには,「同じ」と「等しい」には異なるニュアンスがあるのを,意識しています.文字列を扱うときに,顕著にあらわれます.
例えば,xとyという,2つの値について,「同じ」というのは,メモリ空間の中で指し示している箇所が同一であることを意味します.「同一のオブジェクト」という言い方は,CでもJavaでも(「オブジェクト」の意味は異なりますが)使用することができます.
ですが,変数x(の指し示す先)に,"wakayama"をあらわす文字列を格納したのち,条件判定で"wakayama"と「等しい」かどうかを判定したい,というとき,前の段落に書いた「同じ」あるいは「同一のオブジェクト」の意味で,判定するわけにはいきません.それぞれの値をもとに,一致しているかを,チェックする必要があります.
C言語で文字列は,通常,charのポインタを使って処理します*2.char *x, *y;と宣言して,2つの変数に代入をしたのち,「if (x == y)」と書いたら,「同じ」かどうかの判定を行います.「等しい」かどうかのチェックであれば,標準ライブラリ関数のstrcmpを用いて「if (!strcmp(x, y))」のように記述します.
JavaではStringクラスを使用し,「同じ」の判定は「if (x == y)」,「等しい」の判定は「if (x.equals(y))」とします.
プログラミング言語において「同じ」は「==」で,「等しい」はequalのように英語で書くのが一般的かというと,決してそうではなく,例えばRubyでは逆になります.具体的には,「同じ」の判定を「if x.equal?(y)」のように書きます(「?」を含めて「equal?」がメソッドの名前となります).それに対し「等しい」の判定は「if x == y」です.
Javaについては==演算子とequalsメソッドの違いで,またRubyではリファレンスマニュアルのObject#equal?で,コード例とともに解説を読むことができます.
上で引用した中に,数学的には「同じ」は「等しい」よりも緩い関係とされるとありました.それに対しプログラミングでは,「等しい」からといって「同じ」であるとは限らない(逆は成り立つ)ため,「同じ」は「等しい」よりも厳しい要請である,と個人的には理解しています.


「かけ算の順序」の観点で,「同じ」「等しい」の違いが配慮された文書は,思い浮かびませんが,小学校学習指導要領解説算数編について2010年1月に公開された日英対訳*3を見ると,「「3×4」と「4×3」の答えが同じ12になる」は"“3×4” and “4×3” are both 12",「乗数と被乗数を交換しても積は同じになる」は"Even if the multiplier and the multiplicand are switched, the answer remains the same"と英訳されています.それから,Greerによる,乗法・除法が用いられる場合には"Equal groups"と"Equal measures"があり,これらの「同じ数ずつ」の場面では,sameではなくequalの語が用いられています.

*1:a=2を左辺と右辺の式にそれぞれ代入して,ともに7であるのを確かめた際には,「このとき両辺は等しい」とも,「どちらも同じ7になる」とも言っていいはずです.

*2:ただし「オブジェクト」としては,'\0'で終端となる,文字(char型)の配列が,「文字列」となります.

*3:http://www.criced.tsukuba.ac.jp/math/apec/ICME12/Lesson_Study_set/ElementarySchoolTeachingGuide-Mathmatics-JP-EN.pdf