バグをなくす方法を考える。
最初に定義を述べる。
この場合のバグとはエラーのことであり、それもSyntax Error(文法的間違い)のレベルではない。一見正常に動作しておきながら、期待した結果が得られないロジックエラーのことを言う。
2chのプログラマー板を見るならば、世の中にはロジックエラーの存在すら理解できないプログラマー(たいがいは無駄に年食ったロートル)がいるのだと言う。恐ろしいことである。こういう手合いに年金を計算させたりしてはいけない。
Syntax Errorならばリファレンスを読めば解決する。それができないのは基本的な人間としての能力が足りてないのでここでは取り扱わない。小学校からやり直せばいいのだ。
さて、バグと言うのは、他の病気やウィルスその他の例にもれず、発生したのを潰すよりも、そもそも発生しないようなプログラミングをする方が効果的だ。対処よりも予防と言う訳だ。
ごく基本的なことを言えば、Perlならばuse strictするとかがこれに当たる。Perlは色々できて敷居の低い言語だが、商業で使うものでuse strictして動かない物は信用するに値しない(と思っている)。
他にも、ネームスペースを使ったりローカル変数を作ったりでグローバルな変数を極力使わないなどのテクニックがある。
ではNScripterではどうかと言うと、実はこう言った「バグを出さないための仕組み」をシステムの側から提供していないのである。(せいぜいがデバッグウィンドウだが……)
従って、NScripterはこう言ったプログラミング言語としての作法を学ぶ言語としては不適であると結論できる。別にこういった全てのプログラム言語で共通のテクニックを学ぶ必要があるのだ。
変数の取り扱い
NScripterでプログラミングをしていて、最初に困るのが恐らく変数の扱いであろう。
あれ? この番号もう使ったかな?(何に使ったっけ?)
変数が番号で表現されているので、一度に七つを超える物を覚えていられない人間の性として、絶対に変数の番号とその中身との対応ができなくなるタイミングが来るのである。
この対処法としては、numaliasをフル活用することが上げられる。
また、サブルーチン化も見逃せない。
「同じような処理はまとめてサブルーチンにする」ことで、避けられるバグもある。
同じような処理を何度も書いていき、ある時全ての処理で変更をしなければならなくなった時、サブルーチンを使っていればサブルーチンだけをいじればいいところを、全ての同じような処理をいじらなければならないとすると、そこにバグは入り込むだろう。
サブルーチン化は、他にも効能があり、「そのサブルーチン内で使う変数はn番からm番」と定め、他の部分で決してそれを使わなければ、そこには変数の混入によるバグは起こりえないことになる。擬似的なローカル変数を実現する訳だ。
ついでに言えばサブルーチンは、ただサブルーチンとするよりもdefsubによる命令化の方が、引数を渡せる点などで非常にバグを混入させないプログラミングが可能になる。
コーディング規約を自分で決めて自分で遵守することがバグを入れない基本になる。自己規定のできない人間はプログラマーにはなれんと言い換えることもできよう。
こう言った自己規定をすることで、プログラミング上、リソースの無駄が生じることもあるだろうが、それはバグを出さないことに対するコストとして割り切りたい。
次からは、もうちょっとつっこんだことに触れていきたい。
NScripterにおけるパッケージ化
絶対値を返す命令を作ってみる。
#define部 numalias abs_num,100 numalias abs_result,101 defsub abs #ルーチン部 *abs getparam i%abs_result,%abs_num ; 引数を取る。 if %abs_num < 0 mul %abs_num,-1 ; マイナスならばマイナス1をかける。 mov %%abs_result,%abs_num ; 結果を回答変数に代入 return
たとえば、
abs %0,%1
とするならば、%0に%1の内容の絶対値が入る。
サンプルスクリプトはこんな感じで。
*start rnd2 %1,-100,100 ; -100から100までの乱数を発生させる。 %1=%1 abs %0,%1 %1の絶対値=%0 click end
ここで使われているテクニックは
- 使用される変数を全てnumaliasで規定することで、何番を使うかを柔軟に変更できる。
- numaliasに_(アンダーバー)を使って識別接頭辞をつけることで、numalias自身の重複を防ぐ。
- defsub命令により命令化する。
- getparam命令により引数を取れるようにする。
などである。
ダイクストラによれば、サブルーチンや関数は全て返り値を返すべきなのだが、NScripterにはそうでない命令もあるので、それにこだわる必要はないと思う。
ある設定をする命令があるならば、その命令によって設定された数値を取得する別の命令を作るのがNScripterの流儀だろう。画面を800*600にする;mode800に対する、getwindowsize命令などその一例である。
今回は数学関数であり、返り値を戻してナンボだったので、第一引数に与えた変数に結果を返すことにした。第一引数に結果を返す仕様は、他のcosなどを始めとする既定の数学関数と仕様を合わせた結果である。こういう法則性に留意するのも、理解を助けバグのないプログラムを作る基礎となる事項だ。
追記。同じ変数を使って、もう一つのabsを作ってみた。
defsub abs2 *abs2 getparam i%abs_result if %%abs_result < 0 mul %%abs_result,-1 return
引数に与えた変数を絶対値に変換してしまうものだ。元の数値を使う必要がない場合はこちらを使った方が恐らくは早いだろう。
結論として、このルーチンを使った場合、
- abs_で始まるnumaliasの変数は使わない
ことを守る限り、abs(とabs2)命令はどんな場合でも誤作動しないことがわかるだろう。(もしそれで誤作動するのであれば、それはNScripter自身のバグであるからして、その場合は速やかに高橋直樹氏に連絡すること。多分せねばならん状況はないと思うが)
中でどんな処理をしているか気にせず、ただ引数の与え方と結果の取得の仕方(あわせてインターフェイスと呼ぶ)を規定し、それを崩さなければ、それは「パッケージ化されている」と表現し、安定の第一歩となる。
アインシュタインだか誰だかはこんなことを言っていたように思う。
物事はそれ以上分割できないくらいに単純化してから考えろ
正しい動作をする部品を組み合わせてできた物が、正しい道具でないはずがないのだ。
もしそうなら、それは組み立てた奴が馬鹿なだけだ。
交代劇2
id:eiji8pou:20050827:1125140937 の続き
http://blog.livedoor.jp/anime_antena/archives/50040963.html
まだ続くのかよ!
でもま、「個人連絡にこだわる心理的な理由がある」のは、言われれば納得できるかも。結果には納得できんけどな。
こわいのもの見たさ
いまどきのファイル共有ソフトの作り方なんて本があるらしい。
dfltweb1.onamae.com – このドメインはお名前.comで取得されています。によると、PerlでP2Pソフトを作るためのものだとか。おいおい。
http://d.hatena.ne.jp/./yaneurao/20050831#p1 こちらによると、内容的にかなり心配になりそうだとか言っている。
うむう。ネットワーク系で最初に読む本がこれだったら間違った認識を持ってしまい苦労しそう。どうしよう。
これは面白い。
【実録】ネコ裁判 「ネコが訴えられました。」
この原告のグダグダ感。たまりません。でもこれぐらいやんなきゃ、ミステリとかは書けないんだろうなあ。
性能の差を見せてやる!
結局、Fate/hollow ataraxiaの体験版をやって気付いたことは、NScripterの素での性能に対する不満であろう。
背景が変化しながらテキストが流れる。ただそれだけのことがNScripterでは難しい。(できない、とは言わない。難しい、のだ)
そして背景が様々な効果でゆらぐ。それをNScripterで実現するには、http://gimite.ddo.jp/~kimikage/のhttp://gimite.ddo.jp/~kimikage/gallery4/index.htmにある「活動写真 for NScripter Ver0.0」のようなプラグインに頼らなければならない。少なくとも、このようなエフェクトは自分で用意せねばならない、と言う事実だ。
※ちなみに、テキストを表示しながら背景を動かす技法は、このプラグイン機能を使うのが最も性能的にいいんじゃないか、と考えられる。……オレにはできんがな! orz C言語とかC++とかもロクに知らんのに、この上画像処理までやってられるか!
内容? ……あー。そうだな。眼鏡の遠坂は実にいい、と言うことにしといてくれ。本編やってねえんだから、カンベンしてくれよ。
しかし、歌月十夜と同じ構造なのな。
桜の「ぴょんこぴょんこ」とかメイド二人組の「ちょっとおじおぎ」とか、遠坂の「カメラ倒し」とかできたら楽しそうだなあ。だなあ。だよなあ? ついでに、薄くなりながら移動ってのもいいなあ。
ソフトフォーカスとかどうすんだよー。やっぱレイヤー処理しなきゃなんねえのかよー。こんな時相談できるツレがいないってのはつらいなあ。こちとらこれでも素人よ。プロのプログラマーなんぞに知り合いはいねえ。はぁ……。なんか本でも買うか? いい本ないかなー……。
お遊び
何度も引き合いに出すが、http://gimite.ddo.jp/~kimikage/のhttp://gimite.ddo.jp/~kimikage/gallery4/index.htmにある「活動写真 for NScripter Ver0.0」をツールキットで使った一例。嘘回想シーンが作れる。
http://www.eiji8pou.pics/download/oldmovie.zip
性能の差を見せてやる!
結局、Fate/hollow ataraxiaの体験版をやって気付いたことは、NScripterの素での性能に対する不満であろう。
背景が変化しながらテキストが流れる。ただそれだけのことがNScripterでは難しい。(できない、とは言わない。難しい、のだ)
そして背景が様々な効果でゆらぐ。それをNScripterで実現するには、http://gimite.ddo.jp/~kimikage/のhttp://gimite.ddo.jp/~kimikage/gallery4/index.htmにある「活動写真 for NScripter Ver0.0」のようなプラグインに頼らなければならない。少なくとも、このようなエフェクトは自分で用意せねばならない、と言う事実だ。
※ちなみに、テキストを表示しながら背景を動かす技法は、このプラグイン機能を使うのが最も性能的にいいんじゃないか、と考えられる。……オレにはできんがな! orz C言語とかC++とかもロクに知らんのに、この上画像処理までやってられるか!
内容? ……あー。そうだな。眼鏡の遠坂は実にいい、と言うことにしといてくれ。本編やってねえんだから、カンベンしてくれよ。
しかし、歌月十夜と同じ構造なのな。
桜の「ぴょんこぴょんこ」とかメイド二人組の「ちょっとおじおぎ」とか、遠坂の「カメラ倒し」とかできたら楽しそうだなあ。だなあ。だよなあ? ついでに、薄くなりながら移動ってのもいいなあ。
ソフトフォーカスとかどうすんだよー。やっぱレイヤー処理しなきゃなんねえのかよー。こんな時相談できるツレがいないってのはつらいなあ。こちとらこれでも素人よ。プロのプログラマーなんぞに知り合いはいねえ。はぁ……。なんか本でも買うか? いい本ないかなー……。
お遊び
何度も引き合いに出すが、http://gimite.ddo.jp/~kimikage/のhttp://gimite.ddo.jp/~kimikage/gallery4/index.htmにある「活動写真 for NScripter Ver0.0」をツールキットで使った一例。嘘回想シーンが作れる。
http://www.eiji8pou.pics/download/oldmovie.zip
バグをなくす方法を考える。
最初に定義を述べる。
この場合のバグとはエラーのことであり、それもSyntax Error(文法的間違い)のレベルではない。一見正常に動作しておきながら、期待した結果が得られないロジックエラーのことを言う。
2chのプログラマー板を見るならば、世の中にはロジックエラーの存在すら理解できないプログラマー(たいがいは無駄に年食ったロートル)がいるのだと言う。恐ろしいことである。こういう手合いに年金を計算させたりしてはいけない。
Syntax Errorならばリファレンスを読めば解決する。それができないのは基本的な人間としての能力が足りてないのでここでは取り扱わない。小学校からやり直せばいいのだ。
さて、バグと言うのは、他の病気やウィルスその他の例にもれず、発生したのを潰すよりも、そもそも発生しないようなプログラミングをする方が効果的だ。対処よりも予防と言う訳だ。
ごく基本的なことを言えば、Perlならばuse strictするとかがこれに当たる。Perlは色々できて敷居の低い言語だが、商業で使うものでuse strictして動かない物は信用するに値しない(と思っている)。
他にも、ネームスペースを使ったりローカル変数を作ったりでグローバルな変数を極力使わないなどのテクニックがある。
ではNScripterではどうかと言うと、実はこう言った「バグを出さないための仕組み」をシステムの側から提供していないのである。(せいぜいがデバッグウィンドウだが……)
従って、NScripterはこう言ったプログラミング言語としての作法を学ぶ言語としては不適であると結論できる。別にこういった全てのプログラム言語で共通のテクニックを学ぶ必要があるのだ。
変数の取り扱い
NScripterでプログラミングをしていて、最初に困るのが恐らく変数の扱いであろう。
あれ? この番号もう使ったかな?(何に使ったっけ?)
変数が番号で表現されているので、一度に七つを超える物を覚えていられない人間の性として、絶対に変数の番号とその中身との対応ができなくなるタイミングが来るのである。
この対処法としては、numaliasをフル活用することが上げられる。
また、サブルーチン化も見逃せない。
「同じような処理はまとめてサブルーチンにする」ことで、避けられるバグもある。
同じような処理を何度も書いていき、ある時全ての処理で変更をしなければならなくなった時、サブルーチンを使っていればサブルーチンだけをいじればいいところを、全ての同じような処理をいじらなければならないとすると、そこにバグは入り込むだろう。
サブルーチン化は、他にも効能があり、「そのサブルーチン内で使う変数はn番からm番」と定め、他の部分で決してそれを使わなければ、そこには変数の混入によるバグは起こりえないことになる。擬似的なローカル変数を実現する訳だ。
ついでに言えばサブルーチンは、ただサブルーチンとするよりもdefsubによる命令化の方が、引数を渡せる点などで非常にバグを混入させないプログラミングが可能になる。
コーディング規約を自分で決めて自分で遵守することがバグを入れない基本になる。自己規定のできない人間はプログラマーにはなれんと言い換えることもできよう。
こう言った自己規定をすることで、プログラミング上、リソースの無駄が生じることもあるだろうが、それはバグを出さないことに対するコストとして割り切りたい。
次からは、もうちょっとつっこんだことに触れていきたい。
NScripterにおけるパッケージ化
絶対値を返す命令を作ってみる。
#define部 numalias abs_num,100 numalias abs_result,101 defsub abs #ルーチン部 *abs getparam i%abs_result,%abs_num ; 引数を取る。 if %abs_num < 0 mul %abs_num,-1 ; マイナスならばマイナス1をかける。 mov %%abs_result,%abs_num ; 結果を回答変数に代入 return
たとえば、
abs %0,%1
とするならば、%0に%1の内容の絶対値が入る。
サンプルスクリプトはこんな感じで。
*start rnd2 %1,-100,100 ; -100から100までの乱数を発生させる。 %1=%1 abs %0,%1 %1の絶対値=%0 click end
ここで使われているテクニックは
- 使用される変数を全てnumaliasで規定することで、何番を使うかを柔軟に変更できる。
- numaliasに_(アンダーバー)を使って識別接頭辞をつけることで、numalias自身の重複を防ぐ。
- defsub命令により命令化する。
- getparam命令により引数を取れるようにする。
などである。
ダイクストラによれば、サブルーチンや関数は全て返り値を返すべきなのだが、NScripterにはそうでない命令もあるので、それにこだわる必要はないと思う。
ある設定をする命令があるならば、その命令によって設定された数値を取得する別の命令を作るのがNScripterの流儀だろう。画面を800*600にする;mode800に対する、getwindowsize命令などその一例である。
今回は数学関数であり、返り値を戻してナンボだったので、第一引数に与えた変数に結果を返すことにした。第一引数に結果を返す仕様は、他のcosなどを始めとする既定の数学関数と仕様を合わせた結果である。こういう法則性に留意するのも、理解を助けバグのないプログラムを作る基礎となる事項だ。
追記。同じ変数を使って、もう一つのabsを作ってみた。
defsub abs2 *abs2 getparam i%abs_result if %%abs_result < 0 mul %%abs_result,-1 return
引数に与えた変数を絶対値に変換してしまうものだ。元の数値を使う必要がない場合はこちらを使った方が恐らくは早いだろう。
結論として、このルーチンを使った場合、
- abs_で始まるnumaliasの変数は使わない
ことを守る限り、abs(とabs2)命令はどんな場合でも誤作動しないことがわかるだろう。(もしそれで誤作動するのであれば、それはNScripter自身のバグであるからして、その場合は速やかに高橋直樹氏に連絡すること。多分せねばならん状況はないと思うが)
中でどんな処理をしているか気にせず、ただ引数の与え方と結果の取得の仕方(あわせてインターフェイスと呼ぶ)を規定し、それを崩さなければ、それは「パッケージ化されている」と表現し、安定の第一歩となる。
アインシュタインだか誰だかはこんなことを言っていたように思う。
物事はそれ以上分割できないくらいに単純化してから考えろ
正しい動作をする部品を組み合わせてできた物が、正しい道具でないはずがないのだ。
もしそうなら、それは組み立てた奴が馬鹿なだけだ。
交代劇2
id:eiji8pou:20050827:1125140937 の続き
http://blog.livedoor.jp/anime_antena/archives/50040963.html
まだ続くのかよ!
でもま、「個人連絡にこだわる心理的な理由がある」のは、言われれば納得できるかも。結果には納得できんけどな。
こわいのもの見たさ
いまどきのファイル共有ソフトの作り方なんて本があるらしい。
dfltweb1.onamae.com – このドメインはお名前.comで取得されています。によると、PerlでP2Pソフトを作るためのものだとか。おいおい。
http://d.hatena.ne.jp/./yaneurao/20050831#p1 こちらによると、内容的にかなり心配になりそうだとか言っている。
うむう。ネットワーク系で最初に読む本がこれだったら間違った認識を持ってしまい苦労しそう。どうしよう。
これは面白い。
【実録】ネコ裁判 「ネコが訴えられました。」
この原告のグダグダ感。たまりません。でもこれぐらいやんなきゃ、ミステリとかは書けないんだろうなあ。
性能の差を見せてやる!
結局、Fate/hollow ataraxiaの体験版をやって気付いたことは、NScripterの素での性能に対する不満であろう。
背景が変化しながらテキストが流れる。ただそれだけのことがNScripterでは難しい。(できない、とは言わない。難しい、のだ)
そして背景が様々な効果でゆらぐ。それをNScripterで実現するには、http://gimite.ddo.jp/~kimikage/のhttp://gimite.ddo.jp/~kimikage/gallery4/index.htmにある「活動写真 for NScripter Ver0.0」のようなプラグインに頼らなければならない。少なくとも、このようなエフェクトは自分で用意せねばならない、と言う事実だ。
※ちなみに、テキストを表示しながら背景を動かす技法は、このプラグイン機能を使うのが最も性能的にいいんじゃないか、と考えられる。……オレにはできんがな! orz C言語とかC++とかもロクに知らんのに、この上画像処理までやってられるか!
内容? ……あー。そうだな。眼鏡の遠坂は実にいい、と言うことにしといてくれ。本編やってねえんだから、カンベンしてくれよ。
しかし、歌月十夜と同じ構造なのな。
桜の「ぴょんこぴょんこ」とかメイド二人組の「ちょっとおじおぎ」とか、遠坂の「カメラ倒し」とかできたら楽しそうだなあ。だなあ。だよなあ? ついでに、薄くなりながら移動ってのもいいなあ。
ソフトフォーカスとかどうすんだよー。やっぱレイヤー処理しなきゃなんねえのかよー。こんな時相談できるツレがいないってのはつらいなあ。こちとらこれでも素人よ。プロのプログラマーなんぞに知り合いはいねえ。はぁ……。なんか本でも買うか? いい本ないかなー……。
お遊び
何度も引き合いに出すが、http://gimite.ddo.jp/~kimikage/のhttp://gimite.ddo.jp/~kimikage/gallery4/index.htmにある「活動写真 for NScripter Ver0.0」をツールキットで使った一例。嘘回想シーンが作れる。
http://www.eiji8pou.net/download/oldmovie.zip
バグをなくす方法を考える。
最初に定義を述べる。
この場合のバグとはエラーのことであり、それもSyntax Error(文法的間違い)のレベルではない。一見正常に動作しておきながら、期待した結果が得られないロジックエラーのことを言う。
2chのプログラマー板を見るならば、世の中にはロジックエラーの存在すら理解できないプログラマー(たいがいは無駄に年食ったロートル)がいるのだと言う。恐ろしいことである。こういう手合いに年金を計算させたりしてはいけない。
Syntax Errorならばリファレンスを読めば解決する。それができないのは基本的な人間としての能力が足りてないのでここでは取り扱わない。小学校からやり直せばいいのだ。
さて、バグと言うのは、他の病気やウィルスその他の例にもれず、発生したのを潰すよりも、そもそも発生しないようなプログラミングをする方が効果的だ。対処よりも予防と言う訳だ。
ごく基本的なことを言えば、Perlならばuse strictするとかがこれに当たる。Perlは色々できて敷居の低い言語だが、商業で使うものでuse strictして動かない物は信用するに値しない(と思っている)。
他にも、ネームスペースを使ったりローカル変数を作ったりでグローバルな変数を極力使わないなどのテクニックがある。
ではNScripterではどうかと言うと、実はこう言った「バグを出さないための仕組み」をシステムの側から提供していないのである。(せいぜいがデバッグウィンドウだが……)
従って、NScripterはこう言ったプログラミング言語としての作法を学ぶ言語としては不適であると結論できる。別にこういった全てのプログラム言語で共通のテクニックを学ぶ必要があるのだ。
変数の取り扱い
NScripterでプログラミングをしていて、最初に困るのが恐らく変数の扱いであろう。
あれ? この番号もう使ったかな?(何に使ったっけ?)
変数が番号で表現されているので、一度に七つを超える物を覚えていられない人間の性として、絶対に変数の番号とその中身との対応ができなくなるタイミングが来るのである。
この対処法としては、numaliasをフル活用することが上げられる。
また、サブルーチン化も見逃せない。
「同じような処理はまとめてサブルーチンにする」ことで、避けられるバグもある。
同じような処理を何度も書いていき、ある時全ての処理で変更をしなければならなくなった時、サブルーチンを使っていればサブルーチンだけをいじればいいところを、全ての同じような処理をいじらなければならないとすると、そこにバグは入り込むだろう。
サブルーチン化は、他にも効能があり、「そのサブルーチン内で使う変数はn番からm番」と定め、他の部分で決してそれを使わなければ、そこには変数の混入によるバグは起こりえないことになる。擬似的なローカル変数を実現する訳だ。
ついでに言えばサブルーチンは、ただサブルーチンとするよりもdefsubによる命令化の方が、引数を渡せる点などで非常にバグを混入させないプログラミングが可能になる。
コーディング規約を自分で決めて自分で遵守することがバグを入れない基本になる。自己規定のできない人間はプログラマーにはなれんと言い換えることもできよう。
こう言った自己規定をすることで、プログラミング上、リソースの無駄が生じることもあるだろうが、それはバグを出さないことに対するコストとして割り切りたい。
次からは、もうちょっとつっこんだことに触れていきたい。
NScripterにおけるパッケージ化
絶対値を返す命令を作ってみる。
#define部 numalias abs_num,100 numalias abs_result,101 defsub abs #ルーチン部 *abs getparam i%abs_result,%abs_num ; 引数を取る。 if %abs_num < 0 mul %abs_num,-1 ; マイナスならばマイナス1をかける。 mov %%abs_result,%abs_num ; 結果を回答変数に代入 return
たとえば、
abs %0,%1
とするならば、%0に%1の内容の絶対値が入る。
サンプルスクリプトはこんな感じで。
*start rnd2 %1,-100,100 ; -100から100までの乱数を発生させる。 %1=%1 abs %0,%1 %1の絶対値=%0 click end
ここで使われているテクニックは
- 使用される変数を全てnumaliasで規定することで、何番を使うかを柔軟に変更できる。
- numaliasに_(アンダーバー)を使って識別接頭辞をつけることで、numalias自身の重複を防ぐ。
- defsub命令により命令化する。
- getparam命令により引数を取れるようにする。
などである。
ダイクストラによれば、サブルーチンや関数は全て返り値を返すべきなのだが、NScripterにはそうでない命令もあるので、それにこだわる必要はないと思う。
ある設定をする命令があるならば、その命令によって設定された数値を取得する別の命令を作るのがNScripterの流儀だろう。画面を800*600にする;mode800に対する、getwindowsize命令などその一例である。
今回は数学関数であり、返り値を戻してナンボだったので、第一引数に与えた変数に結果を返すことにした。第一引数に結果を返す仕様は、他のcosなどを始めとする既定の数学関数と仕様を合わせた結果である。こういう法則性に留意するのも、理解を助けバグのないプログラムを作る基礎となる事項だ。
追記。同じ変数を使って、もう一つのabsを作ってみた。
defsub abs2 *abs2 getparam i%abs_result if %%abs_result < 0 mul %%abs_result,-1 return
引数に与えた変数を絶対値に変換してしまうものだ。元の数値を使う必要がない場合はこちらを使った方が恐らくは早いだろう。
結論として、このルーチンを使った場合、
- abs_で始まるnumaliasの変数は使わない
ことを守る限り、abs(とabs2)命令はどんな場合でも誤作動しないことがわかるだろう。(もしそれで誤作動するのであれば、それはNScripter自身のバグであるからして、その場合は速やかに高橋直樹氏に連絡すること。多分せねばならん状況はないと思うが)
中でどんな処理をしているか気にせず、ただ引数の与え方と結果の取得の仕方(あわせてインターフェイスと呼ぶ)を規定し、それを崩さなければ、それは「パッケージ化されている」と表現し、安定の第一歩となる。
アインシュタインだか誰だかはこんなことを言っていたように思う。
物事はそれ以上分割できないくらいに単純化してから考えろ
正しい動作をする部品を組み合わせてできた物が、正しい道具でないはずがないのだ。
もしそうなら、それは組み立てた奴が馬鹿なだけだ。
交代劇2
id:eiji8pou:20050827:1125140937 の続き
http://blog.livedoor.jp/anime_antena/archives/50040963.html
まだ続くのかよ!
でもま、「個人連絡にこだわる心理的な理由がある」のは、言われれば納得できるかも。結果には納得できんけどな。
こわいのもの見たさ
いまどきのファイル共有ソフトの作り方なんて本があるらしい。
dfltweb1.onamae.com – このドメインはお名前.comで取得されています。によると、PerlでP2Pソフトを作るためのものだとか。おいおい。
http://d.hatena.ne.jp/./yaneurao/20050831#p1 こちらによると、内容的にかなり心配になりそうだとか言っている。
うむう。ネットワーク系で最初に読む本がこれだったら間違った認識を持ってしまい苦労しそう。どうしよう。
これは面白い。
【実録】ネコ裁判 「ネコが訴えられました。」
この原告のグダグダ感。たまりません。でもこれぐらいやんなきゃ、ミステリとかは書けないんだろうなあ。