- PR -

1行に代入文2個 これは何?

投稿者投稿内容
sawat
大ベテラン
会議室デビュー日: 2006/08/02
投稿数: 112
投稿日時: 2007-03-01 16:52
数学とjavaやCのような手続き型プログラミング言語では、代入の概念も、変数の概念も、異なっています。少なくともWikipediaにおいては。

代入
(以下のどちらかの「変数」を参照するようにと記述されている)
変数
変数 (プログラミング)

私見といたしましては、object氏は 手続き型プログラミング言語よりも、変数や代入の概念が数学と同じである 純粋関数型プログラミング言語 (Haskellなど) をつかって、なおかつその文脈の中でのみ数学的な議論をされるとよいと思います。
object
ぬし
会議室デビュー日: 2002/03/20
投稿数: 338
お住まい・勤務地: 香川県高松市
投稿日時: 2007-03-02 12:20
objectです。
=========================
>ラフィンさん
お久しぶりです。

>数学の「=」は両辺が値が一致し、時間の概念がなく時間は一致するに等しい。
>Cの「=」は両辺の値は一致するが、両辺の時間は一致せず両方に含まれる変数の値は一致するとは限らない。
>Cの「==」は時間は一致するが、両辺の値は一致するとは限らない。
演算子としての「==」は、両辺が等しい事を強要しません。
そして、「=」は、簡単に言えば、
最終的な「右辺値」の「左辺値」への一度限りの処理ですから、
恐らく、仰っている事は同じなんだと思います。

ただ、処理としては、
「3 = 2 + 1」
しかないと思います。
#理由は、上の私の説明で分かると思います。
=========================
>あすかさん
件名「1行に代入文2個 これは何?」
に対する内容が漏れていました。
これは、「C」の表現にすると
「1行に代入式2個」
という事です。
詳しい事は、
「式、文、デリミタ」
をキーワードに調べてみて下さい。

返答を送信する段階で
件名「1行に代入文2個 これは何?(逆順)」
と「(逆順)」が付いているのが分かりました。

最初の発言の私の主旨を要約すると、
「その一文は、実行可能なドキュメント」
の意味合いが強いという事です。
従って、処理としては最後になっても、
出来るだけ、【重要なもの、自然なもの】が最初に来ている
という事だと私は思います。
#私自身逆順なる事を意識した事が記憶にあります。
=========================
>shimixさん
私は、今の「ソフト開発の現場」に欠けている事を一番危惧しています。
それから、代入自体を
「=、:=、etc.」
何で表現するかは関係ありません。
=========================
>nagiseさん
今回は、議論にならない様です。
これで終わりにしましょう。
=========================
>sawatさん
「純粋関数型プログラミング言語 (Haskellなど)云々」
に関しては、
私の自己満足に関しては、私自身の範囲内でやっております。

しかし、私が一番重要視し、大切だと考えているのは
「開発の現場」
です。

ここで発言している最大の根拠はそれだけです。
今迄一貫して「同じもの」を伝えようとして来ましたが、
最近は、出来るだけしない事にしています。
そして、今後の発言は今迄以上に減ると思います。
末記人
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 233
お住まい・勤務地: あわにこ
投稿日時: 2007-03-02 13:45
引用:

objectさんの書き込み (2007-02-27 11:10) より:
objectです。

コード:

Pattern pattern1;
Pattern pattern2;
pattern1 = pattern2 = getPattern();


の手続き的意味は、確かに
コード:


Pattern pattern1;
Pattern pattern2;
pattern2 = getPattern();
pattern1 = pattern2;


だと思います。
しかし
コード:

pattern1 = pattern2 = getPattern();


の心は、
「pattern1 = pattern2」
つまり、
「代入」という意味より「等しい」という意味であり、
そしてその値が「getPattern()」である
という事の言明になっていると考える事が大切ではないでしょうか?



このスレを読み返してみて気になったのですが

Pattern がオブジェクトだとして
= がオブジェクトをコピーしてその参照を返すようにオーバーライド
された演算子だったり、コンストラクタなどの仕様によっては
数学的な = にはならないんじゃないですか?

それに、オブジェクトの場合数学的イコールはなにを指すのでしょうか?
内容が同じ?参照先が同じ(=内容も同じですがw)?

オブジェクトである場合には

pattern1 = pattern2 = getPattern();



pattern2 = getPattern();
pattern1 = pattern2;

は等価に必ずしもなるとは限らないと思いますが
間違ってますか?

pattern1 = pattern2 = getPattern();
の正しい解釈は
pattern2 = getPattern();
の演算(メソッド)を実行し
pattern1 = その返り値で = の演算(メソッド)を実行する

大抵の場合 = は 右辺の値を左辺に代入しその値を 返しますが
オブジェクトの場合はインスタンスを返すものもあれば、参照カウントを
インクリメントしてその参照を返すだけだったりすることも出来るので
数学的 = と同じと言ってしまうのもどうかと...


[ メッセージ編集済み 編集者: 末記人 編集日時 2007-03-02 13:49 ]

[ メッセージ編集済み 編集者: 末記人 編集日時 2007-03-02 13:59 ]
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-03-02 13:55
引用:

objectさんの書き込み (2007-03-02 12:20) より:
objectです。
=========================
>ラフィンさん
お久しぶりです。

>数学の「=」は両辺が値が一致し、時間の概念がなく時間は一致するに等しい。
>Cの「=」は両辺の値は一致するが、両辺の時間は一致せず両方に含まれる変数の値は一致するとは限らない。
>Cの「==」は時間は一致するが、両辺の値は一致するとは限らない。
演算子としての「==」は、両辺が等しい事を強要しません。
そして、「=」は、簡単に言えば、
最終的な「右辺値」の「左辺値」への一度限りの処理ですから、
恐らく、仰っている事は同じなんだと思います。

ただ、処理としては、
「3 = 2 + 1」
しかないと思います。
#理由は、上の私の説明で分かると思います。
=========================
>あすかさん
件名「1行に代入文2個 これは何?」
に対する内容が漏れていました。
これは、「C」の表現にすると
「1行に代入式2個」
という事です。
詳しい事は、
「式、文、デリミタ」
をキーワードに調べてみて下さい。

返答を送信する段階で
件名「1行に代入文2個 これは何?(逆順)」
と「(逆順)」が付いているのが分かりました。

最初の発言の私の主旨を要約すると、
「その一文は、実行可能なドキュメント」
の意味合いが強いという事です。
従って、処理としては最後になっても、
出来るだけ、【重要なもの、自然なもの】が最初に来ている
という事だと私は思います。
#私自身逆順なる事を意識した事が記憶にあります。
=========================
>shimixさん
私は、今の「ソフト開発の現場」に欠けている事を一番危惧しています。
それから、代入自体を
「=、:=、etc.」
何で表現するかは関係ありません。
=========================
>nagiseさん
今回は、議論にならない様です。
これで終わりにしましょう。
=========================
>sawatさん
「純粋関数型プログラミング言語 (Haskellなど)云々」
に関しては、
私の自己満足に関しては、私自身の範囲内でやっております。

しかし、私が一番重要視し、大切だと考えているのは
「開発の現場」
です。

ここで発言している最大の根拠はそれだけです。
今迄一貫して「同じもの」を伝えようとして来ましたが、
最近は、出来るだけしない事にしています。
そして、今後の発言は今迄以上に減ると思います。



以前Jitta氏が「自分の言葉で語れ」と言っていたが。
まずくなると調べろ(他の文献にあたれ)だの議論を打ち切ったりだの。やれやれ。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-03-02 14:04
引用:

objectさんの書き込み (2007-03-02 12:20) より:
最初の発言の私の主旨を要約すると、
「その一文は、実行可能なドキュメント」
の意味合いが強いという事です。
従って、処理としては最後になっても、
出来るだけ、【重要なもの、自然なもの】が最初に来ている
という事だと私は思います。



「その一文は、実行可能なドキュメント」という考えはよいと思いますよ。
コードそのものが可読性の高いドキュメンテーションになっているとすれば
これほど理想的なものはありませんね。

ですが、実際には「明示」になっていない。
コードの動きを理解したうえで注意して読み解かなくては誤解する恐れがある。
そこに問題があることが先の私の投稿で指摘してあるわけです。

引用:

>nagiseさん
今回は、議論にならない様です。
これで終わりにしましょう。


まったく同感です。というと皮肉すぎるかもしれませんね。
私は「議論」とは違う意見をぶつけ合ってより真実に近づく過程と考えています。
違う意見が出るということはそこに見えていない何かが隠れていることが多い。
さて、それは何なのでしょう?

君子豹変すという言葉がありますね。
私は常々そうありたいと考えています。
私の考え、理解に誤りがあったと思えば、早々に考えを改めたいと思っています。
もし、それでも単に私が理解する気がないから伝わらないのだ、
と結論されるのであればまさしく「議論にならない」わけですね。

引用:

しかし、私が一番重要視し、大切だと考えているのは
「開発の現場」
です。

ここで発言している最大の根拠はそれだけです。
今迄一貫して「同じもの」を伝えようとして来ましたが、
最近は、出来るだけしない事にしています。
そして、今後の発言は今迄以上に減ると思います。



私なんかはその現場の代表のようなものなわけですが。
伝えようとすることが伝わらない原因はなんだと考えておいでですか?

私も理論は好きですけれども、ことさら工学畑の人間なので
「現場での実用性」を第一として考えています。
絶望的なまでに食い違う意見をひとつひとつ合わせていく、
そんな工程こそが現場での仕事の実態ですよ。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2007-03-02 14:16
るぱんです。

横レス失礼。
引用:

nagiseさんの書き込み (2007-03-02 14:04) より:
絶望的なまでに食い違う意見をひとつひとつ合わせていく、
そんな工程こそが現場での仕事の実態ですよ。


これ、非常に同感です。
大事ですよね。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2007-03-02 15:02
 あの排他的な会議室で、こんな議論が交わせるようになっているとは・・・別れて三日、即ち当に刮目して相待つべし!!

コブラ

[ メッセージ編集済み 編集者: コブラ 編集日時 2007-03-07 17:46 ]
いげ太
常連さん
会議室デビュー日: 2004/10/27
投稿数: 32
投稿日時: 2007-03-02 17:16
Object 氏の主張について自分なりに考えてみました。

object 氏が「実行結果」や「代入の意味」と表現されているものとは、
代入が行われる瞬間を観念的に捉えたスナップショットとでもいうべきもの
ではないだろうか。当然、C 言語的にはそんな瞬間なんてなく、あくまで
「観念的な瞬間」でしかないのだけれど。

例を基に考えてみる。

コード:
hoge = 2;
hoge = hoge + 1;


ここで、「hoge = hoge + 1」のスナップショットは「3 = 2 + 1」です。このとき、
代入演算子「=」を比較演算子「==」と置き換えてできた式「3 == 2 + 1」は
ture を返します。

逆もまた然りです。「==」によって true が返される式において、その演算子を
「=」に置き換えた場合、それは代入時のスナップショットとして成立します。

ここから『「=」と「==」は表裏一体の関係』とおっしゃられていて、
それはつまり、全く別個のものではあるがそれらの記号が使われるとき
両辺の関係性は等価となる、という意味を表しているのではないだろうか。

そしてこれは数学における等号「=」と観念的にオーバーラップするものであり、
このことを持ってして、「=」というメタな記号に対して『「代入」という意味より
「等しい」という意味』という見解を得たとしても何の不思議もないと思います。

ここで遡って、「観念的な瞬間」とは何かについてもう少し考察してみます。
引き続き上の例において、「hoge = hoge + 1」という式で本当にしたい処理とは
一体なにか、を考えます。これは「3 = 2 + 1」という処理ではないでしょうか。

本質的にすべき演算が行われた瞬間。これが「観念的な瞬間」であり、つまるところ、
「実行結果」とか「代入の意味」と表現されているものではないでしょうか。

前述の通り、C 言語の実装上ありえない瞬間です。しかし実装とはあくまで目的を
達するための手段でしかありえません。実装の中身や動きを考えるのも大切だが、
それが実現する目的(の処理)についても深く考える必要がある。

Object 氏はそういうことをいいたかったんじゃないかなーと勝手思ってるんですが、
いかがでしょう?

スキルアップ/キャリアアップ(JOB@IT)