プロが教える店舗&オフィスのセキュリティ対策術

只今、PHPの講義を受講しています。
しかし、私は数学の頭でしかなく、「代入演算子」の理解ができません。
”なぜ、イコールに違う数字を使っちゃうの?”と、
脳みそに”?”だらけです。 講師もあまり深く突っ込んでもらわずに
「こういう物」と、覚えちゃってください。などと、言います。

私としては、理屈が成り立っていないのに、覚えられる訳がないのです。と、
少し立腹ぎみなのですが、ここは抑えて自分で解決しようと思ったのですが、
やはり、理解できません。

ちなみに、過去に他のプログラム言語を学んだことはありません。

どうか、この数学あたまに代入演算子を理解させる方法をご伝授ください。

A 回答 (11件中1~10件)

> 「こういう物」と、覚えちゃってください。



まぁ、それは 仕方がないかもしれません。
数学式のイコールとは 全く別物ですからね。(*´Д`)

俺の大昔の知り合いも同じ勘違いをしてましたし。

考え方としては、二つあります。

一つは 全く同じ形をしているけど、イコールだと思わない事。
記号としては「←」とするのが妥当だと思うのですが、プログラム言語が出来た時代に、そんな記号は存在しなかった為、イコールを使用したものと思います。
まぁ、今でも 半角で表示される矢印なんて存在しませんが。(キャラクターコード &H1D は別モンなので)

もう一つは、左辺は解、右辺は式が入るものと思うこと。
最近のものは知りませんが、日本の算数で一般的な問題の出し方は 1+1=?と「左辺が式、右辺が解」という感じだと思います。
これの、右辺と左辺がひっくり返ったものとお考えください。

まぁ、正直 その講師も そういわれて覚えてきたんだと思いますよ。

この回答への補足

「←」すごく分かりやすいです。
「=」を「←」であると頭の中に「代入」すればいいのですね。
しかし、、$a++や++$aと「=」が出てこない表記が出てきました。
コレは?どう理解すればいいでしょうか?

補足日時:2011/02/01 16:19
    • good
    • 0

おっしゃるとおり、なかなか 理解しがたいですね。


$hoge = 0;
の 「=」 を 「とは?」 という文字に置き換えてみてはどうでしょう。

$hoge($hogeという変数) =(とは?) 0 (0なのです) ;(以上)
$hogeという変数とは、0 なのです。以上

プログラム言語は数学とは違い、基本左から右に、上から下に コンピューターは 文字として読んでいきます。 プログラム言語は 言葉なのです。
なので 「=」も 言葉なのです。

以降 phpでの 代入演算子に >、<、>=、<= . など いろいろ出てくると思います。
それぞれ、置き換えて 文章化してみてください。
続いた文字列で、コンピュータは意味を理解し、動作していくと思います。
    • good
    • 0

このあたりは、言語によっても様々でして。



PHPを始めとして(「始め」にしていいかどうかはともかく) = で代入という言語は多いです。
数学とは違う、と割り切るしか無いでしょう。

既にあるように←という矢印と考えた方がいいかもしれません。

あるいは、古いBasicだと LET文というのがあって、
LET X=0
が正式な書式で、省略形として
X=0
が使える、というものでした。意味としては「Xを0とする」です。
PHPにはletは無いですが、letがあるものとして考えてもいいかもしれません。


では、数学的な=は、というと、PHPでは==になります。これを混同すると誤動作の原因になります
if ( $a == 0 ) {...}
だと、$aが0に等しいければ{...}が実行されますが、
if ( $a = 0 ) {...}
だと
$aに0が代入させる→ 「$a = 0」という式全体で 「0」と言う値になる→0は偽を表わすので {...}は実行されない
となります。
これも言語によっては両方 = で状況によって自動で使いわけてくれるものもあります(basicとか)

他にも、Pascalにように 代入は := ,比較は = という、おそらく質問者さんにとっては理解しやすいであろう記号を使っている言語もあります。
また、関数型言語と呼ばれる類のものでは、 「変数に代入」という操作自体が無く(あるいは、あるけどあまり使わず)、数学的な「等しい」という意味でのみ使われます。
興味があれば、そういう言語についても少しかじってみてはどうでしょうか?案外PHPだけやるより理解できるかもしれません。
    • good
    • 0

こんにちは、



>私は数学の頭でしかなく、「代入演算子」の理解ができません。
>”なぜ、イコールに違う数字を使っちゃうの?”と、

数学とは関係ない、全く別のものだと考えてみることはできませんでしょうか?

>「こういう物」と、覚えちゃってください。などと、言います。

「プログラミングで言うところの代入を行う際には、イコールを使用する」
と言うことを、覚えることができないのでしょうか?

理解できないとおっしゃらずに、講師が覚えてくださいと言われたら、
それを頭のどこかに置いておき、やって見てくださいと言われた事を素直に
実行して、何かを動かしてみて体験することが今の時期は大事なんじゃないかと
個人的には感じます。

質問者さんは数学が得意な様子ですが、初めて算数を学んだとき、
イコールはどういった物だと学ばれたのでしょうか?
その際にも、単なる棒が2本並んでるだけなのに…と考えられたのでしょうか?

覚えられないことを自身の問題ではないとし、憤りを感じておられるかぎり、
質問者さんが次の段階へ進むことは難しいのではないかと私は思います。

>どうか、この数学あたまに代入演算子を理解させる方法をご伝授ください。
最初に書きましたが、「数学とは全く違う物だ」「プログラミングではこうらしい」と
考えるようにしたら、悩まずにすみませんでしょうか?

受講されている講義が質問者さんのためになることを願っております。
    • good
    • 0

いくつかのプログラム言語を操るプログラマとして率直な感想ですが、


その程度の融通が効かず理解もできないのであれば断念したほうが幸せかと思います。
そりゃ数学の歴史から比べればコンピュータ用の高級言語の歴史は遥かに短いですが、
それでも60年以上続いてきているのですから。

現実に等号記号には複数の意味があるっていう事実を受け入れることはできませんか?
数学で言えば総和記号で使う=は初期値への代入を示すものですが、それも理解できませんか?
    • good
    • 0

本当は


a ← b + 1
としたかったけど、タイプライターに「←」が無かったから。

同じように、タイプライターから引きずって、
×(かける)は「*」だし、
÷は「/」だったりするし。

そういうものだと割り切るしかないと思う。
    • good
    • 0

数学と言うより、言語ですので、日本語を英語に置き換えるのと同じで、


= は is 、左辺は主語、右辺は目的語です。
主語・述語・目的語の語順はまもらないと、コンピューターは翻訳出来ません。
ということで、英語あたまの方を使ってみてください。

この回答への補足

英語なのですね。分かりやすいです。
私は留学経験があり、英語は得意です。

「=」を「is」であると頭の中に「代入」すればいいのですね。
しかし、、$a++や++$aと「=」が出てこない表記が出てきました。
コレは?どう理解すればいいでしょうか?

補足日時:2011/02/01 16:22
    • good
    • 0

#1のを書いてから、ふと思いついてたんだけど、誰か書くだろうと思って放置してたら、誰も書かないので 自分で書きます。


数学あたまの人なら簡単ですよね。
------------------------------
x = 5
y = 3
z = 2

v = x + y * z

vを求めよ。(数学の問題はいつも命令形)
vを求めてね。(こんな問題の出し方だったら答えてもいいかなと思う)
vを求めろっつってんだろゴラァ(( ゜д゜)…)
------------------------------
PHPが これを 求めてくれてるもんだと思ってください。

数式が大学生を こ馬鹿にした某記事と同じなのは わざとです。
PHPは 加減乗除の優先順位は知っているようです。

質問者さんはお礼率が異様に低いので、お礼なんざ期待してませんが、ネタを混入したかったので再度回答しました。(`・ω・´)
    • good
    • 0

数学という世界の文法として=は何かと定義されているだけですよね。


それが別の言語分野では別の意味を持ってもおかしくはないと思いますが...

数学の歴史からすれば、=は両辺が等しいという意味でしょうけど、それも最初にそういう決め事をした
だけであって、もし最初の定義が || という表記方法だったら、とは思えないでしょうか?

もしくは、どこかの言語世界に、=という表記が前後に出てくるものが等しくないということであったら
それがわからないとは通じませんよね。
    • good
    • 0

> ++$a,$a++



それこそ、数学から離れないと一生理解できないでしょうね。

でも、コンピュータの中では基本中の基本と言える計算です。複雑に見える全ての計算も、実際には1加える/1減らすを大量に高速に行うことで実現している...というと言い過ぎかもしれませんが、それくらいの基本。


あと、思ったのですが、数学での漸化式に近いかもしれません。
実行開始から行なったすべての計算に順番に番号を付けて
$a=$a+1;

a_k = a_(k-1) + 1
(_は下付き、kは計算番号)という感じ。で、プログラムは現在kに対してのa_kしか利用できない。

まあ、あまり「イメージ」と結びつけすぎると、「イメージできないと覚えられない」という状態に陥るので、ほどほどにしたほうがよいでしょう。

それと、数学と違う、ということばかり言ってるようですが、コンピュータの基礎となっている「オートマトン」といった考え方は数学の一分野です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!