よく、大学で、プログラミング教育をやる目的として、
「論理性を磨く」とかあるけど、
そもそも、IT業界が扱うスクリプトって、必ずしも論理的とは思えない・・・
(むしろ、直感的かも?)
論理的をGooで調べたら、
1 論理に関するさま。「―な問題について書かれた本」
2 論理にかなっているさま。きちんと筋道を立てて考えるさま。「―に説明する」「―な頭脳の持ち主」
⇒ ろんり【論理】の全ての意味を見る
となっていて、
論理を見たら
1 考えや議論などを進めていく筋道。思考や論証の組み立て。思考の妥当性が保証される法則や形式。「―に飛躍がある」
2 事物の間にある法則的な連関。
3 「論理学」の略。
となっている。ということは、
「おまじない」
とかいって、プログラムを書いたり、フレームワークで、前後は分からないけど、
ここに値をセットすると表示できるというのは、論理的じゃないんですね。
わかります・・・
でもそうすると、現場では、論理的なプログラムは、あまり書いていないかもしれない(^^;)
(直感的で分かりやすくはなってきているんだけどね)
では、論理的に書くことを考える。
・ソクラテスは、人間である
・人間は、死ぬ
・だから、ソクラテスは死ぬ
というのは、三段論法で、演繹的な論理とされる。
これを、プログラミングで書くと、
function isソクラテス死ぬ()
{
カテゴリー=getカテゴリー("ソクラテス")
生死=isカテゴリー死ぬ(カテゴリー)
return 生死
}
となる。でも、このような考えの流れに書くものばかりではない。
例えば、sqlの検索で結果を得たい場合は、
SELECT 結果
from 結果が入っているテーブル
(inner,left,right) join 結果、中間結果が入っているテーブル on 他のテーブルの項目=このテーブルの項目
where 問いについて書かれたテーブル.項目=問いの値
という形で、結果を先に出してくる。
ソクラテスの例で言うと
SELECT カテゴリー生死TBL.生死
from カテゴリー生死TBL
inner join インスタンスカテゴリーTBL on カテゴリー生死TBL.カテゴリーID = インスタンスカテゴリーTBL.カテゴリーID
where インスタンスカテゴリーTBL.インスタンス名='ソクラテス';
のような感じになる。ちなみに、
カテゴリー生死TBL(カテゴリーID int,生死 BOOLEAN)、
インスタンスカテゴリーTBL(インスタンス名 varchar(50),カテゴリーID int)
のようなテーブルを想定している。
そして、webサービスで、インスタンス→カテゴリー、カテゴリ→生死サービスがある場合、
$.ajax({
:
URL:インスタンス→カテゴリーサービス
data: "name=ソクラテス",
datatype: "JSON",
success: function(msg){
$.ajax({
:
URL:カテゴリ→生死サービス
data: msg,
datatype: "JSON",
success: function(msg){
alert( "ソクラテスは" + msg );
}
}
});
と、(successの)中に書いていく。
この場合、今はソクラテスだけだからいいけれど、
ソクラテスとプラトンと、ジェミノイドを調べるという場合、
並列処理となり、同期を取る必要がある場合、難しくなってくる。
最近流行の、とうべき性が求められる場合、
順番、件数、関係なしにしたいことになる。
この場合には、ルールを以下のように並べるとできる
if (事前条件が満たされている && 事後条件は設定されていない) then
事後条件=処理
endif
そして、最終的な事後条件が達成するまで、繰り返す。
ソクラテスの例だと、
ソクラテス生死=null
カテゴリー=null
インスタンス名=”ソクラテス”
while ソクラテス生死 == null
ロジックループ = false
// ルールStart
if ( カテゴリー != null && ソクラテス生死 == null )
ソクラテス生死 = isカテゴリー死ぬ(カテゴリー)
ロジックループ = true
endif
if ( インスタンス名 != null && カテゴリー == null )
カテゴリー = getカテゴリー(インスタンス名)
ロジックループ = true
endif
// ルールEND
if ( ロジックループ==false )
print("ルールが足りないので、処理できず、無限ループになる")
break;
endif
loop
なかんじです。
この場合、事前条件と事後条件だけ分かれば、論理の道筋は、プログラマが
知る必要はない(というか、ルールで書く場合、わからないほど、複雑なものを書く)
この場合、順番も関係ない(わざと、isカテゴリー死ぬから、書いている)
つまり、いまどきの、
AJAXとか、
SQLとか、
とうべきせいのあるスクリプトや
ルールベースは
順番に書いていかないし、とくに、最後のルールベースなんて、
筋道わかんなくってもOKになっている
(やりたいことを直接書く)
って、こういう時代に、「筋道立てて、プログラムを書く書き方を教わっても・・・」
使えるところは、あまり無いかもしれない
(昔みたいに、そもそも、長いコードを書かないんだよね・・・)