• ベストアンサー

JavaScriptでVBのOption Explicitのように変数の明示的な宣言を強制することは不可能?

たぶんできないのだとは思いますが、ダメ元で質問です。 JavaScriptでVBのOption Explicitステートメントのように、変数の明示的な宣言を強制することはできないのでしょうか? 調べた限りでは、なさそうですが、将来的に言語使仕様が変わる云々の可能性も含めてコメント頂けると幸いです。 できないとすると、変数のタイプミスによるバグの発見が大変だと思いますが、皆さんはどのように工夫してデバッグされていますか?

noname#5584
noname#5584

質問者が選んだベストアンサー

  • ベストアンサー
noname#199778
noname#199778
回答No.2

質問の題にある点については、詳しくないのでちょっとお答えできませんが、デバッグ作業のことについて。 私の場合はブラウザに実行させて、それぞれのブラウザが出すエラーレポートを参考にしてデバッグしています。 Netscape7.1は、ツールメニューのWeb開発という項目内にあるJavaScriptコンソールでエラーをチェックできます。 エラーの起きている問題の行や、エラーの内容を記録して表示してくれるので、なかなか便利です。 Opera7.11にも、「ウィンドウメニュー」の中の特殊ウィンドウに含まれるJavaScriptコンソールがあり、これも一応エラーを辿る時に使えます。 IEも、エラーを出すとステータスバー上のアイコン表示が出ますので、それをダブルクリックして出てくるダイアログ上の詳細情報で、エラーの起きた動作を拾えます。 ただし、IEで提供されるJavaScriptのエラー情報は非常に断片的で、デバッグする時には少々力不足なところがあります。 変数のタイプミスくらいであれば、上記のいずれでも異常を見つけられます。 ただ、オブジェクトやステートメントのタイプミスなどになると、IEの情報では検知し難くなるので、IEでは原因がつかみきれないエラーは、Netscape7.1のJavaScriptコンソールを使って探しています。 IEのみで動作するスクリプトについては、どうしてもIEのエラー情報からバグのある部分を推定して、問題を探し出す必要がありますが、クロスブラウザで動作するスクリプトの場合はほとんどのデバッグ作業はNetscape7.1上でやっています。 なお、Netscapeは4でもJavaScriptコンソールを実装していたと思います。 NetscapeでJavaScriptの動作に問題があったときには、アドレスバーに「javascript:」と記入して実行すると、JavaScriptコンソールが立ち上がると思います(最近のNetscapeでも同じ手順でJavaScriptコンソールを起動できます)。 私はこのような感じでデバッグを行っています。 参考になれば…

noname#5584
質問者

お礼

コメントありがとうございます。 なぜか、IEの環境では、スクリプトの記述が正しくないのにエラーが出ない(しかし、当然ながら意図した動作をしない)場合が多いようなのです。 > オブジェクトやステートメントのタイプミスなどになると、IEの情報では検知し難くなるので、IEでは原因がつかみきれないエラーは、Netscape7.1のJavaScriptコンソールを使って探しています。 機会があれば、ご指摘のツールも検討してみます。 情報提供ありがとうございました。

その他の回答 (2)

  • nuki
  • ベストアンサー率30% (6/20)
回答No.3

残念ながらできないと思われます。 #2に対するお礼として 「なぜか、IEの環境では、スクリプトの記述が正しくないのにエラーが出ない」 と説明されていますが、 (1) 詳細設定で「スクリプト エラーごとに通知を表示する」がチェックされていること (2) ステータスバーの左下に黄色の三角に黒でエクスクラメーションマークが表示されている場合に発生したスクリプトエラーは、エラーチェックされないこと の2点を確認されるとデバッグできる範囲が広がるのではないでしょうか?

noname#5584
質問者

お礼

「できない」という結論は当初から予想していましたが、裏付けが取れて、あきらめが付きました。(笑 デバッグの方法に関しては参考になるアドバイスを頂き、ありがとうございました。

  • the845t
  • ベストアンサー率33% (246/743)
回答No.1

Mozillaというブラウザには、JavaScriptコンソールというものが付属していて、 エラーなどを表示してくれますよ。 Netscape7以降にもついているかもしれません。 ブラウザの軽さで考えるなら、Mozilla Firebirdを利用されるのが一番良いかもしれません。

noname#5584
質問者

補足

コメントありがとうございます。 > Mozillaというブラウザには、JavaScriptコンソールというものが付属していて、 > エラーなどを表示してくれますよ。 > Netscape7以降にもついているかもしれません。 エラーにならない記述ミスも検出できるのでしょうか? (構文上は誤りではないが、意図する記述とは異なる場合)

関連するQ&A

  • VB2010で、変数の宣言がわかりません。

    VB2010で、変数の宣言がわかりません。 Option Explicit Public i, j, k, l As Long Public ii, jj, kk, ll As Long Public lngFileSuu As Long Public strTemp As String ・ ・ ・ と標準モジュールに宣言すると エラーがでています。 VB6.0とは宣言方法が違うのでしょうか? 教えてください。よろしくお願いします。

  • 複数のフォーム間での変数宣言

    VB6.0についての質問です。ひとつのプロジェクトの中に複数のフォームがあるとします。この中のある一つのフォームで変数 NUM を宣言し、何かの計算値を入れます。このNUMを値は保持したまま、他のフォームで利用することはできるのでしょうか? とりあえず全てのフォームのコードの先頭(プロシージャの外、Option Explicit下)に「Public NUM As Single」と宣言して挑戦してみたのですが、駄目でした。。よろしくお願いします。

  • 変数宣言は、最初に全部列挙したほうがいいですか?

    100行ぐらいのスクリプトだと、10個ぐらい変数宣言しなければいけませんが、 最初にまとめて書くメリットを教えてください。 ※他人のコードを読んでいて、最初にすべての変数宣言があったら、最初に戻らないとわからなくなり、その時、その時に、変数宣言があったほうがいいかなと。 ※言語によって違ってきますが、例えばJAVASCRIPTだとグローバル関数とローカルの問題があります。そのようなことを踏まえて、ご経験、ご意見を教えてください。

  • VBでのPublic変数について(超初心者的質問です)

    すみません。立て続けですが、教えてください。 public変数は、他人には、変更されないですよね。 例をだすと、完成したあと、数人の人がそのシステムを使ってるとします。 AクンがPublic変数fooを使っていたとします。同時にBクンもたまたま、Public変数fooをつかっていたとします。 上記の例の場合、AクンBクンとも個々にPublic変数fooが用意されるんですかね?? なんか、本を読んでいたらPublic変数は、「どのモジュールからもアクセスできる変数」と書いてあるとともに「他人に変更されたくなければ、Public宣言をしてはいけない」ようなことが書いてあります。多分、僕の読解力不足だと思うんですが。 使用言語はVBです。 よろしくお願いします。

  • PHPでは、あんま大きなプログラムは作れないの?

    PHPでは、あんま大きなプログラムは作れないの? だって、変数の宣言が必要ないから。 変数の宣言が必要ない、ってことは、 おかしな変数があっても、コンパイラーが 事前にチェックできないってことだし。 つまりそれって、デバッグが難しくなるってことでしょう? だから、 「デバッグがめんどくなってきたな、、、」 と感じたら、それは、そろそろJavaとかに 移行しろ、っていう、神からのメッセージでしょ? 変数を使うにあたって、あらかじめ、 宣言が必要な言語であれば、 宣言の無い変数が登場した段階でエラーではじくし、 デバッグも容易になるよね。 つまりそれって、プログラムが大規模になってきたら、 そういう厳密系な言語にシフトしたほうが ストレスがたまらなくっていいってことでしょう?

    • ベストアンサー
    • PHP
  • Option Explictについて教えてください

    WEBでOption Explictを検索したら ------------------------------------ option explicit を指定して実行すると、 「コンパイルエラー変数が定義されていません。」 のエラーが出て、青色に反転します。 つまり、単純ミスが防げます。 option explicit が無いと ミスがミスと分からずに実行しますので、 間違った結果が出てしまいます。 option explicit は無条件に定義しましょう。 ---------------------------------- 変数の宣言を強制されるため、 変数のタイプミスを防ぐことができます。 ---------------------------------- 初心者はVBEの「ツール」の「オプション」 「編集」を選択して「変数の宣言を強制する」 (初期状態ではチェックがついていません) には必ずチェック。 ------------------------------------ 変数を宣言しているのはユーザーの環境が、 Option Explicit と明示的に変数を宣言することを 要求されている可能性があるので「エラーが出ました」 という場合があるからです --------------------------------- など色々と見つかりました。 一番わかりやすかったのは ↓これでした。 http://okwave.jp/qa/q4304440.html また以下のような説明もありました。 Option Explicitをつけた場合とつけない場合で 下のソースを実行してみてください。 abc = "Hello" Msgbox(adc) ↓ で説明のように試してみたら ・つけた場合→コンパイルエラー ・つけない場合→エラーにならずMsgboxは空白 でした。これは理解できました。 ですが以下の場合 Option Explicit Sub Macro1() Sheets("Sheet1").Select Columns("A:A").Select Selection.Copy Columns("C:C").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A1").Select End Sub 多分変数は宣言していないので 「変数が定義されていません」とエラーが出ると 思ったのに、でませんでした。 >変数の宣言を強制されるため >Option Explicit と明示的に変数を宣言することを >要求されている可能性 の説明からの自分の解釈と合致しません。 option explicitを指定すると 【記述内に変数宣言がないとエラーになる】 と解釈したのですがそれは間違っていますか? それともSub Macro1()はどこかに変数宣言が あるのでしょうか? 凄くわかりやすく教えていただきたいです。 【追記】 退職者が残したエクセルファイルにて。 Sheet1~Sheet8まであります。 VBEで見ていくと Sheet1:Option Explict  Sheet2:Option Explict  Sheet3:Option Explict  Sheet4:Option Explict  Sheet5:Option Explict  Sheet6:何も無し Sheet7:Option Explict  Sheet8:Option Explict  次に標準モジュールを見ると Module1:Option Explict Sub Macro2() Module2:Option Explict Sub Macro3()  Module3:Option Explict Sub Macro4() Module4:Option Explict Sub Macro5()  Module5:Option Explict  Module6:Option Explict Sub Macro1() となっています。 Macro1~Macro5は全て マクロの記録のみで作成されています。 これを修正するのですが、Option Explictを 初めて見たので困惑しています。 よろしくお願いします。

  • 最初に使う変数のゼロクリアについて

    変数宣言をしてその変数を使用する場合、ゼロクリアというのは常識なのかも知れませんが、フォートランはデフォルトでゼロクリアになっていたと理解しています。てっきりそうだと思っていたのですが、フリーのフォートランコンパイラg95はゼロクリアになっていないみたいです。すなわちg95では変数宣言して値を明示的に与える前に使用するとゼロと思っていたのがとんでもない値になっていました。 コンパイラの仕様を読んでおくというのは数値計算を行う上で重要なことだと考えます。 前置きが長くなりました。質問ですが、コンパイラで変数宣言した時点でゼロクリアになっていないというのは言語としてはどのようなものがあるのでしょうか? 全部なのでしょうか。全部そうだと思っていた方が安全ではあると思いますが。 よろしくお願いします。

  • VBとVC++を両方使うプログラム(VS2008)

    VBとVC++を両方使うプログラムのデバッグなんですが、VBとVC++を両方使って作ったプログラム全体を一つのソリューションにまとめて統合環境で動かしてデバッグしたいです。VS2008でVBとVC++を両方使うプログラムの作り方をサンプル付で説明した本はありませんでしょうか? MSDN読んでもさっぱりわかりません。アンマネージかマネージかアクティブXかというと、dllのほうは基本的にOpenGL使うためなので当面はアンマネージでいいかも。でも今後はマネージドになっていくのでしょう。 VB6/VC6の頃はVC++でdllを作ってVBから呼び出してましたが、デバッグのときにdll側にバグがあるとVB側からどういうデータが来ていたのかわからずに苦労していました。まとめて動かして変数の値を追えれば便利です。 無理せず一つの言語でやれといわれそうですが、やはりVCの方が速度は速いし何よりも両方使えれば両方のサンプルコードが使えるので便利だし、何よりC++を使わないと上達しないのでやるしかありません。そんなわけでよろしくお願いします。

  • 変数の定義の仕方をご教授ください。

    Option Explicit Function EncodeURI(uri As String) As String Set sc = CreateObject("ScriptControl") sc.Language = "JScript" Set js = sc.CodeObject EncodeURI = js.encodeURIComponent(uri) End Function ------------------------------------------- をデバッグすると「sc =」と「js =」の部分が「変数が定義されていません」となってしまいます。 変数を宣言する時に、 dim sc  as まではわかるのですが変数のデータ型を何にしてあげればいいのでしょうか?

  • IE8開発者ツールでソースの修正

    JavaScriptのデバッグにIEの開発者ツールを使用してみようと考えています。 そこで質問なのですが、 開発者ツールでデバッグしている最中に、JavaScriptのソースプログラムを修正するにはどうしたら良いのでしょうか? ブレイクポイントの設定やステップ実行、変数の値を表示するなどの使い方はわかったのですが、バグの原因がわかった時、直接ソースを修正しようと、左側の画面にカーソルを移動しましたが、修正ができませんでした。 HTMLの属性などは、ダブルクリックすると書き換えることが可能なようですが、JavaScriptも同様に修正することはできないのでしょうか? 開発環境は WindowsXP IE8 です。 よろしくお願い申し上げます。

専門家に質問してみよう