トピック
キルル2 kiruru2

OPTION STRICTについて

私は今、1000行程度のプログラムを組んでいます そこで、OPTION STRICTというものを使ってみたいと思うのですが、分からないことがあります それは、「どのようなメリットがあるのか」という点です 自分で調べてみて、「変数の打ち間違いを指摘してくれる」ことと「上級者ほどよく使う」ということが分かりました 他には何かできることはありませんか?それと、なぜ上級者ほどよく使うのでしょうか?
3そうだね
プレイ済み
返信[1]
親投稿
SilverBlue Corei72630QM
OPTION STRICTが無いと、間違った変数名を使用し、計算が正しく行われないなどがあるので、私は使用しています。 また、メモリ残量を最初から使用する分取るので、途中でOut of memoryしにくいです。 上級者ほど使っているのは、私も分かりません。(集団心理?)
2そうだね
プレイ済み
返信[2]
親投稿
キルル2 kiruru2
out of memoryですか…いつか遭遇してみたいものですね 計算が正しく行われないというのはちょっと困りますね。式は合っていても答えが間違っている感じでしょうか だとしたら厄介ですね…
0そうだね
プレイ済み
返信[3]
親投稿
SilverBlue Corei72630QM
あ、計算が正しく行われないというのは、間違った変数名を使用しても注意されなく、気付かないので、0除算や加算減算などを行っても思い通りの結果にならないと言うことです。プチコンの機能が正常動作しない訳ではないです。
2そうだね
プレイ済み
返信[4]
親投稿
optionstrict前使おうとしたけどいちいち変数を宣言しなきゃいけないのが本当は便利なんだろうけど面倒臭くなって結局今も宣言無しで使ってるという((
1そうだね
プレイ済み
返信[5]
親投稿
たかChi takashi_o
他の方も言っておられますが、プログラミングしていて「そんな変数無えよ!」と指摘してくれることはありがたいことなのです。ただ実行時じゃなく打ち込んでる最中に言ってもらいたいですがプチコンでそれは高望みですね・・・
2そうだね
プレイ済み
返信[6]
親投稿
あきと SideBurnsM
変数SCOREに点数を足してるつもりなのに SC0REと書いてしまって「なんで点数増えないの…?」と何時間も調べるはめになったりする経験を重ねるとOPTION SCRICTが使いたくなりますよ。
4そうだね
プレイ済み
返信[7]
親投稿
自分自身は微塵も上級者ではないですが…。 使うべき、というか絶対使った方が効率いいですよ~。 変数の打ちミスで時間を無駄に使うことがなくなるし、あと他言語(Cとか)の変数宣言が必要なものでも違和感無くプログラミングできますしね。(但し個人の感想)
0そうだね
プレイ済み
返信[8]
親投稿
みなつ tksm372
OPTION STRICTを使う理由がよく分からない、という疑問は、言い換えると「変数をいちいちVARやDIMで宣言するの面倒くさくないですか?」ということなんじゃないかなーと思います(・'ω'・) プログラムに慣れてくると、プログラムの大部分をサブルーチンの中に書くようになってきます。「敵を移動する処理」「自機を移動する処理」「弾を移動する処理」「背景を表示する処理」みたいに、機能ごとにプログラムを小分けにできるので、全体の構造を把握するのが楽ちんです(≧∇≦)b んでんで、私の場合はサブルーチンをDEFで定義しますが、DEF~ENDの中だけで使う変数(ローカル変数)は、OPTION STRICTが無くてもVARやDIMで宣言する必要があります。 なので、どうせ変数宣言は必要なので、それならOPTION STRICTにしておいたほうが変数名の間違いも分かってお得、という感じです^^
4そうだね
プレイ済み
返信[9]
親投稿
おちゃめ ochame_nako
個人的には特にメリットを感じないならば無理に使う必要はないと思います。 大したメリットもないのにわざわざ宣言をしないと使えないのは面倒だと思っているならば逆に使うことで「プログラミングが面倒」という感覚が生まれてデメリットとなります。 すでにすべての変数を宣言して使用している人であればOPTION STRICTはほとんどデメリットのない「保険」となるため特に問題はないでしょう。 個人的にはHENSUをHENSUUと記述する等の「間違った変数名を書いてしまっているのに何でエラーで指摘してくれないんだ!」と思ってから使い始めるくらいがちょうど良いと思います。 便利さというのは不便に感じてからの方がより実感できるからです。 私は規模の大きなプログラムは作ってないこともあり基本的に変数の宣言はDEF内でしか使用していないためOPTION STRICTを使用することは滅多にありません。
5そうだね
プレイ済み
返信[10]
親投稿
おちゃめ ochame_nako
上級者ほどよく使う理由としては他の言語の大半が宣言して変数を使用するものが大半であるためそれがすでに当たり前に感じてしまっているからとか実際に変数名を間違ってミスを捜すのに四苦八苦した経験があるからではないでしょうか。 その「経験」の差というのは単純に言葉を並べてもなかなか実感はできないと思います。
3そうだね
プレイ済み
返信[11]
親投稿
変数を宣言しておくことで、プログラムが読みやすくというメリットもあると思います。
2そうだね
プレイ済み
返信[12]
親投稿
SquidSky ugomemo_gorohati
逆にOPTION STRICTで、コードの信頼性が向上するというメリットもあります。
0そうだね
プレイ済み
返信[13]
親投稿
ぴくと kanau1203
宣言した各々の変数の役割を覚えておくために使ってます あと変数名のミスのためにも
1そうだね
プレイ済み
返信[14]
親投稿
Godot orz_127
単純に、上級者となるほど有用性を理解しているので使っているのかと。 初心者だと存在を知らない、若しくは存在を知っていても「それ何?」状態なので、使っていないのかと。
3そうだね
プレイ済み
返信[15]
親投稿
プログラムでは変数を使うためには「変数をこの名前で使います」って変数定義の宣言がどこかには絶対必要なんですが、 「初めて変数名が出てきたとき」に変数定義をすることで、文章を書くような感じでプログラムが書けるのがBASICの basic(初めてでもプログラムが書ける) らしいところなのです。 ※文章といっても英語なので、IF xx THEN や FOR xx NEXT も文章ぽく書けるのです(大昔には日本語でBASICが書ける「ぴゅう太」というのもあったり) OPTION STRICT は「変数が出てきたときに定義する」ことでデメリットとなる、変数名の打ち間違えた場合に思った通りに動かなくて、それが気づきずらいのを解消するため「変数は最初に定義」させる指示です。 (だいたいの初心者講座には変数名を打ち間違えたら正しく動かないので修正するという講座があるくらい、人間は打ち間違えをします)
3そうだね
プレイ済み
返信[16]
親投稿
キルル2 kiruru2
なるほど… 確かに私には他の言語を扱ったことも変数名を間違って苦しんだ経験もありませんね より経験を積み、精進したいとおもいます 回答してくださった皆さん、ありがとうございました
2そうだね
プレイ済み
返信[17]
親投稿
プログラムの仕様は決まっているけど、その仕様でどうやってプログラムを書くかはBASICや他の言語でも実は人それぞれなのです。 プチコンでの書き方も皆さんが書いているように、その人の作り方のスタイルで変数を宣言する人、変数宣言しない人がいます。 (複数人で作るなら変数定義するかとか、変数名どんな感じでつけるかは決める必要があったりします) ちなにみ私はBASICの場合は変数宣言してなくて、DIM やVARを特に使わずに、プログラムの先頭やブロックの先頭に SCRX=400 みたいな形で使う変数をまとめて書いておいて、初期値をいれるようなやり方をしてます。 IやXみたいな1文字変数は宣言せずにFORの付近などの短い範囲で使ってます (DIMやVAR書くのめんどい派です)
2そうだね
プレイ済み
返信[18]
親投稿
そひ ladixsofiya
すでに使用宣言された変数を また使用宣言してるぞー と エラー吐いてくれるというのも大きなメリットなのかな。 自身は経験値少ないので 断言は出来ませんが。 大規模になってから宣言を知って 修正面倒を避けてからの 更なる面倒から地獄を経験してるので 自身は使うべきものと捉えてますが それでも場合によりけりですね。 実験的に作ってみる物なんかは 宣言のデメリットのが多いと感じて 使わなかったり。
1そうだね
プレイ済み
返信[19]
親投稿
TERA(LL) tera0413
← OPTION STRICTなんて、自転車に慣れないお子様の使う補助輪と思ってた人
0そうだね
プレイ済み
返信[20]
親投稿
たとえば、3000行のゲームで「アイテムを手に入れたのに増えない」ってとき、1行ずつ確認しますかね? 実際には「あのサブルーチンでミスったかなぁ?」と見当がつくでしょうが、それでも、10行とか確認するのは億劫です。 スタートボタンプッシュ、1秒で分かる原因の行番号! 圧倒的な点検効率を実現します。 プログラマというのは非効率がお嫌いなことが多いので、10行確認する時間を惜しむ以前に、「1秒でできることに2秒以上かける」という行為が許せなかったりします。
2そうだね
プレイ済み
返信[21]
親投稿
※1秒は行番号が知れるまでの時間です。該当行を直すのにはLIST ERRを行うのでもう数秒かかります。あしからず。
0そうだね
プレイ済み
返信[22]
親投稿
キルル2 kiruru2
そうなのかもですね ありがとうございます
0そうだね
プレイ済み
返信[23]
親投稿
Godot orz_127
もし「OPTION STRICT」が書いてあると恥ずかしい場合は、公開前にこっそりと「OPTION STRICT」行を削除してしまえば大丈夫です。
1そうだね
プレイ済み
返信[24]
親投稿
キルル2 kiruru2
Gobotさん それだと自動でDEFINTになると思うのですが、挙動が変わったりしませんか?
0そうだね
プレイ済み
返信[25]
親投稿
そんな機能はないぞ
0そうだね
プレイ済み
返信[26]
親投稿
MIKI ifconfig
プチコン3号では run すると (1) まずソースコードをコンパイルして中間コードに変換します。 (2) 次にその中間コードをインタープリタが実行していきます。 option strict は、コンパイラに対しての指令なので(1)の段階で *抜け漏れなく* エラーチェックします。 syntax error を見つけるのも(1)のフェーズ。 古い BASIC (プチコンmkIIも) では、インタプリタがソースをちまちまと読みながらチマチマと実行して行くので、もし未定義変数参照をエラーにしようと思ったら、実際に該当するコードを実行した時にしかチェックできません。 syntax error も同じで、mkII だと goto @p a;s"djfa; scv890[3 @p ? "NO ERROR" ↑こんなコードでもエラーなく実行できてしまいます。 どっちが便利かな? って話。
1そうだね
プレイ済み
返信[27]
親投稿
OPTION STRICT 配列でない変数でも未宣言エラーを出す OPTION DEFINT 数値変数のデフォルトを整数型とする。 独立してて無関係
1そうだね
プレイ済み
返信[28]
親投稿
「OPTION」って英語で「オプション」だからプチコンにつけるオプションって事かな?
1そうだね
プレイ済み
返信[29]
親投稿
OPTION STRICT OPTION DEFINT もしかしてON/OFFみたいに対になるものだと誤解…?
1そうだね
プレイ済み
返信[30]
親投稿
なんでオプションなのか…分かンネ 変数のオプションって感じだけど…
0そうだね
プレイ済み
返信[31]
親投稿
MIKI ifconfig
var で宣言するのが面倒って考え方がありますが、プログラマーって基本的に面倒くさがりなのです。 ただ、面倒の種類によりけりで、 (1)単純作業などは絶対に嫌 (2)そういう面倒を避けるための努力は惜しまない というタイプが多いですね。
2そうだね
プレイ済み
返信[32]
親投稿
Godot orz_127
MIKIさん、あまさとさんが既にコメントされていますが、STRICTはチェック用のオプションでデフォルトの値を4バイト整数値とするDEFINTとは、関連がなく、別で動作します。 公開時には既にバグを含めて修正済みの筈なので、普通は実行時にいちいちチェックする必要がないかと。 よって、完成したら「OPTION STRICT」は無くても良い、と言う認識です。 あった方が起動が早くなるとかありましたっけ?>偉い方 最初にOPTIONで指定するのは、VBAで見たことがあります。 確か配列の添え字を0から始めるか、1から始めるかを指定出来たかと。 VB系の仕様に倣ったのではないかと。
1そうだね
プレイ済み
返信[33]
親投稿
MIKI ifconfig
一般にコンパイラに対してプログラマが指令を出す方法はいくつかあって、ひとつはコマンドラインや統合環境のメニューなどから指定する方法。もうひとつはソースコード中に特別な命令(コンパイラ指令)を書くこと。 option は後者。 たぶん VisualBasic からの借用かなあ?? VB でエディタを開くと自動的に先頭に option explicit という一行が入ります。意味はプチコンの strict と似たようなもの。 defint は古い BASIC や VB では独立した命令で、 defint I-N とか書いて、意味は「I~Nで始まる変数名を整数型にする」というものでしたね。なんとなく define integer って気がしますね。 option defint だと default integer って感じる(個人の意見です)
1そうだね
プレイ済み
返信[34]
親投稿
メリットもデメリットも人それぞれですし色んな意見が出たんで、それを参考に自分に必要かどうかを判断するといいんじゃないかなって思います。
1そうだね
プレイ済み
返信[35]
親投稿
キルル2 kiruru2
たった今、まとめて読ませていただきました でんぺんさんの仰る通り、メリット、デメリットは人それぞれのような気がしますね 現在私が作っているゲームに関して言えば、すでにほぼ完成しているので変数を宣言する気が起きませんが、次に作るゲームではこれを使ってみたいと思います Gobotさん、MIKIさん、あまさと しおんさん 丁寧かつ詳しい説明をありがとうございます おかげで疑問は解消されました トピックを閉じさせていただきます
1そうだね
プレイ済み