エクセル指向プログラミング(Excel Oriented Programming、EOP)は、ノンプログラマにとって最も直感的で習得が容易なプログラミングスタイルです。
ブログラマは難解な言語機能を覚えることなく、拡張が容易なソフトウェアを、簡単に開発することができます。
プログラムのすべてのデータは長さ可変の二次元配列の上で管理されます。この二次元配列を「シート」といい、配列の各要素を「セル」と言います。
シートはシングルトンオブジェクトです。すなわち、EOPでは単一のグローバル変数を上書きすることでプログラムの状態を更新します。
構造化データはすべて配列で表します。データ型などのスキーマはありません。どの行・どの列がなんのデータを表すのかは、その場その場で変更することができます。
行方向または列方向に連続するセルが一つのデータ構造を表します。したがって、構造化データの読み取りは
while(cell) {
// do something
cell = sheet[r][c++];
}
のように書けます。使い終わった領域は0またはnullで初期化しておきます。
ネストされた構造化データは、セルへの参照をセルに書き込みます。たとえば、多重配列を表現する場合は、ネストされた配列の先頭要素の座標をセルに書き込みます。
EOPでは、プログラマは好きなときに好きなデータ構造を使用することができます。既存のプログラミングスタイルのように、データ型やメソッドのシグネチャに、データ構造が制限されることがありません。
探検
エクセル指向プログラミング
2024/03/26(火) 17:12:59.08ID:e/0sucGI
2024/03/26(火) 17:38:31.01ID:e/0sucGI
例として、nameとage属性をもったデータ構造を読み取るプログラムを書いてみましょう。
r = 0;
name = 0;
age = 1;
while(cell) {
print("name: " + sheet[r][name] + ", age: " + sheet[r][age]);
cell = sheet[r++][name];
}
このように、EOPでは構造体やクラスのような難解な機能を使わずとも、配列とループだけでデータ構造を操作することができます。
特筆すべきことは、EOPではデータ構造は使用時に自由に変更できます。もし、上のデータ構造に新たな属性sexが必要であれば、単に追加すればよいのです。
MALE = 1;
FEMALE = 2;
sex = 2;
sheet[0][sex] = MALE;
sheet[1][sex] = FEMALE;
r = 0;
name = 0;
age = 1;
while(cell) {
print("name: " + sheet[r][name] + ", age: " + sheet[r][age]);
cell = sheet[r++][name];
}
このように、EOPでは構造体やクラスのような難解な機能を使わずとも、配列とループだけでデータ構造を操作することができます。
特筆すべきことは、EOPではデータ構造は使用時に自由に変更できます。もし、上のデータ構造に新たな属性sexが必要であれば、単に追加すればよいのです。
MALE = 1;
FEMALE = 2;
sex = 2;
sheet[0][sex] = MALE;
sheet[1][sex] = FEMALE;
2024/03/26(火) 19:22:17.08ID:e/0sucGI
EOPでは関数は使いません。別の処理に移動したい場合は、単にジャンプ先のセルの座標を指定すればよいのです。
以下は、すごろくを1マスずつ巡回し、BONUSマスならば2つ進め、PENALTYマスならば2つ戻り、巡回したマスをカウントするプログラムです。一度発動したボーナス/ペナルティは二回目からは無効になります。
r = 0;
c = 0;
cnt = 0
while(cell) {
cnt++;
if(cell == "BONUS") {
cell = "VISITED";
c += 2;
} else if(cell == "PENALTY") {
cell = "VISITED";
c -= 2;
} else {
c += 1;
}
cell = sheet[r][c];
}
以下は、すごろくを1マスずつ巡回し、BONUSマスならば2つ進め、PENALTYマスならば2つ戻り、巡回したマスをカウントするプログラムです。一度発動したボーナス/ペナルティは二回目からは無効になります。
r = 0;
c = 0;
cnt = 0
while(cell) {
cnt++;
if(cell == "BONUS") {
cell = "VISITED";
c += 2;
} else if(cell == "PENALTY") {
cell = "VISITED";
c -= 2;
} else {
c += 1;
}
cell = sheet[r][c];
}
レスを投稿する
ニュース
- フィンランド首相、「つり目」投稿問題で日本向けに「心からお詫び」 [どどん★]
- 日中関係改善は「下手をすると10年かかる」 トランプを全面信頼できない高市官邸の苦悩★4 [ぐれ★]
- 【赤坂サウナ火災】非常ベル電源「2年前から入れていない」、押した形跡も [ぐれ★]
- 【野球】WBC、録画放送含め地上波中継なし (ネットフリックス) ★2 [阿弥陀ヶ峰★]
- 牛丼チェーン店で5杯食べ終えて「支払えない」…詐欺容疑で逮捕の男「どうしても腹がすいて」 甲府 [蚤の市★]
- 【東京・赤坂の“個室サウナ店夫婦死亡火災”】 タオルがサウナストーンに触れたことで発火したか 警視庁 [ぐれ★]
- 【東京】サウナ室のドアノブが外れる→非常用ボタンの電源が2年入れられてない→事務所には従業員が不在 [696684471]
- 前澤友作「超富裕日本人2000名集めてパーティ開いて、意見出し合って国に要求するわ」 [237216734]
- 【実況】博衣こよりのえちえちダンガンロンパ2🧪
- 【速報】山上徹夜、明日の求刑で無期懲役へ [329329848]
- 名探偵津田🏡
- 【高市悲報】立憲小西、デマを流した国光がX垢を消し国民になんの説明もしない事にブチギレ💥国光の謝罪文を公開 [359965264]
