「x=x+1」問題をプログラマーから単純明快な説明をする

著者:
投稿日:
更新日:

ちょっと時期が遅れてしまったが、「x=x+1」問題をプログラマーから単純明快な説明したいと思う。実は頭がいい人ほどがわからないが、基本的なプログラマー脳を持っている人なら普通にシンプルな問題なんじゃないかな。


一旦はX(旧Twitter)でどんな話題になっているかをまとめてみた

「x=x+1」問題 ポストまとめ







数学脳とプログラマー脳の違い

X(旧Twitter)でポストしている人達の内容を考えるに基本的には、数学脳とプログラマー脳の違いだという事が分かる。何故、解釈が違くなってしまうのか?そこがこの問題のポイントだと思う。

数学脳は「=」が代入演算子だという事が理解できないからでは

数学での代入演算子は「:=」だ。

最初に数学を勉強したか、プログラミングを勉強したかで、各々で「=」の解釈が変わってしまうのが「x=x+1」問題の根本の問題

そもそもプログラミング言語と数学との整合性はない

  • 数学の代入演算子
  • 数学の等価演算子
  • プログラミング言語の代入演算子
  • プログラミング言語の等価演算子

がかなり違いがあるのも混乱の元であるのは間違いない。

数学とプログラミング言語の代入演算子,等価演算子 比較一覧表

様式代入演算子等価演算子備考
数学:==
フローチャート<-=矢印(<-)は反対向き(->)も可能
ALGOL 68:==
BASICライク[note 1]==代入時にはLETキーワードを使用(省略可能)
C言語ライク[note 2]===
COBOL= or MOVE TO== 演算子を使う際にはCOMPUTEキーワードを付ける
ColdFusion=EQ
Fortran=.EQ.Fortran 90からはC言語ライクの等価演算子もサポート
APL=専用のキーボードを使い直接入力可能
Smalltalk=Pharoなど比較的新しい処理系では代入に:=も使用可能に
GO= or :===関数内に限り:=演算子を使用することで、varキーワードも省略可能
Haskellライク[note 3]==束縛時にLETキーワードを付けるとローカル変数、付けないとグローバル変数扱い
Javascript===代入時にvarキーワードを付けるとローカル変数、付けないとグローバル変数扱い
Pascalライク[note 4]:==
PL/SQL(Oracle):==
Prolog=is or =:=代入は束縛
Scala==varキーワードを付けると再代入可能、valキーワードを付ける再代入不可
R<- or ===矢印(<-)は反対向き(->)も可能、= 演算子は関数呼出の際の引数[省略]名時に使用
shライクなシェル[note 5]=-eq
MATLAB===
Mathematica===
バッチファイル=EQU代入時にはSETキーワードを使用
なでしこ= or は or 代入= or ==変数への代入方法は3つ。変数 = 値、変数は値、値を変数に代入
特殊な言語もあるにはあるが、基本的にプログラミング言語の代入演算子は「=」と解釈してもらっても構わない

数学ならxは定数。プログラムならxは入れ物

プログラミング脳では当たり前の変数に関しても、数学脳で考えると混乱するという。自分自身も変数はだたの箱だと感覚では思っていて、どんな箱かは代入内容によって変わる。

  • シンプルな数字や文字列なのか
  • 箱に箱を入れたarrayなのか
  • はたまたオブジェクト型なのか

でプログラミング脳では考えたり解釈する


決して「定数」ではないのだ。

プログラミング言語では「定数」は「定数」として定義できるので。

まとめ

プログラミング言語を学習せず京大のような頭の良い大学へ行く人がかかる特殊な病みたいなものだと思った。


自分はほぼ数学ができないので、この病にかかった事がない。


全ての情報をまとめて出した結論は単純明快で

  • 「=」の解釈の違い
  • 「変数」の解釈の違い

この2点に集約される。

CMSの悩みはBasicで一気に解決しましょう
  1. 完全無料
    Basicはオープンソースで運営されています。誰しもが自由にBasicを利用できます。
  2. 超軽量化で超高速配信
    通常のCMSよりページ容量を70%以上を自動で圧縮を行い更に自動で静的化・圧縮化されたページが配信されます。
  3. SEOにつよつよ
    70%以上軽量化に加えて最新SEOに対応した構造で静的化・圧縮化されたページはライバルサイトより圧倒的に評価されます
  4. ライバルサイトより一歩前にいけるCMSでサイトを構築しませんか?

    →より詳しく

著者プロフィール
松岡宗谷

Basic https://basic.dance/ を運営しています。スペースナビ 代表取締役。スタートアップ界隈でCTO→Sharetube創業→スペースナビ創業→UXSEOリリース、ResizeCDNリリース、あまてむリリース。世界で最もSEOに効くCMS Basicリリース。個人の夢は完全義体化。会社の夢は宇宙事業。プログラマーは死ぬまで現役でありたい