佐世保 リオ ゆうこ 5, ワン パンマン ネタバレ 176 7, トラベラーズ ドラマ 評価 42, コーンスープ 茶碗蒸し 北斗晶 33, 三井ホーム 価格 実例 5, 北川景子 自宅 住所 15, ハイキュー 占い ツクール 怒る 5, スマブラ シーズン パス 4, ポケモン コハル 嫌い 10, 燈火 灯火 違い 6, ファブル 最新刊 無料 13, さらば青春の光 東ブクロ 相手 13, 誰そ彼 歌詞 Cryamy 7, マクドナルド ハッピーセット 値段 6, アリシア ロドリゲス Wiki 5, We Are Smap 歌詞 コーラス 4, ウイニングポスト ダンスパートナー 産駒 5, 来る 映画 琴子 最後 39, 歌い手 夢小説 男主 12, カローラ スポーツ 4wd 雪道 49, 創作 世界観 作り方 11, 進撃の巨人 コニー かわいそう 11, レイド シルエット 一覧 剣盾 6, ノベルゲーム 作り方 Pc 13, Djdj 届かぬ想い ライブ 24, 会社 全面禁煙 退職 5, Scp 文字数 コンテスト 10, ディーガ 内蔵hdd 認識 しない 4, 佐藤健 8月6日 歌 5, 親子 ですか 英語 4, Tokyo Mx 受信レベル低下 2019 5, 白石会計事務所 熊本 評判 4, 太陽の末裔 ミョンジュ 死 17, Ark テリジノサウルス 採取レベル 11, 別離 離婚 違い 55, 京都 鴨川 ロケ地 4, 福留 2013 なんj 5, 双子 自然分娩 初産 8, 恋愛 勘違い しない ために 49, Claude 名前 意味 8, 地球 自転 なぜ 感じない 19, メッセンジャー 届かない ブロック 24, ドラえもん 声優 今 5, どうぶつの森 ペット 入手方法 7, プロスピ2019 顔コード やり方 56, 北の国から シュウ 手紙北の国から 98 後編 10, フォールアウト76 ファウンデーション デイリー 6, 医 龍 4 桜井院長 6, " />

デッドコード 到達不能コード 違い 5

By

静的コード解析の一種としては、変数の値やその他の実行時の条件がどうであっても決して実行されないコードを、単純なものでは制御構造の分析によって、より高度には抽象解釈などにより検出する。一部の言語(Javaなど)では、ある種の到達不能コードは言語の仕様上許容されない。デッドコードの削除について詳しくはデッドコード削除の記事を参照のこと。 しかし、静的に決定が可能なパターンの到達不能コードの検出は、そういったコードを意図的に書くことは無いといった意味では、最適化よ … i++ が到達不能コードであるというエラーが出ており、調べたところ、こちらのサイトを見たところ、returnを記述することがエラーの要因であるように考えました。, } else {の場合はエラーにしたいのではなく、何も処理を行わずに、iを+1してもう一度if文の中に入るようにしたいと考えています。, 今、上記のソースで実行したところ、i++ が到達不能コードのためi=1のまま終了してしまいます。, teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。, 評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。, 上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。, 2018/08/15 15:45 編集, 実際にエラーの出るコードを提示してください。 [解決方法が見つかりました!] 到達不能コードはコンパイラにとって無意味だからです。コードを人々にとって意味のあるものにすることは、コンパイラーにとって意味のあるものにすることよりも重要であり、困難ですが、コンパイラーはコードの本質的な消費者です。 また、出ているエラーメッセージを、そのまま提示しましょう, eclipseで作業をしており、警告でi++の箇所に「到達不能 デッドコード」と記載されております。, else {の場合は... 何も処理を行わずに、iを+1してもう一度if文の中に入るようにしたい, ※みなさまからの回答を参考にし、作業を進めさせていただき、 プログラムをデバッグするとき、コードのブロック内にreturnステートメントを挿入すると便利であることがよくあります(おそらく悪い習慣ですが)。私はJavaでこのようなことを試みるかもしれません...。, 未使用のコードを持つことは悪い習慣であるため、警告が正当化される理由を理解できました。しかし、なぜこれがエラーを生成する必要があるのか​​理解できません。, これはJavaが乳母になろうとしているだけですか、それともこれをコンパイラエラーにする正当な理由がありますか?, 到達不能コードはコンパイラにとって無意味だからです。コードを人々にとって意味のあるものにすることは、コンパイラーにとって意味のあるものにすることよりも重要であり、困難ですが、コンパイラーはコードの本質的な消費者です。Javaの設計者は、コンパイラにとって意味のないコードはエラーであるという見方をしています。彼らのスタンスは、到達不能コードがある場合、修正が必要な間違いを犯したというものです。, ここにも同様の質問があります:到達不能コード:エラーまたは警告?、著者は「個人的にはエラーであるべきだと強く感じています。プログラマーがコードを書く場合、それは常に何らかのシナリオで実際に実行することを意図している必要があります。」明らかに、Javaの言語設計者は同意します。, 到達不能コードがコンパイルを妨げるべきかどうかは、コンセンサスが得られない問題です。しかし、これがJava設計者がそれを行った理由です。, コメントの多くの人々は、Javaがコンパイルを妨げない到達不能コードのクラスがたくさんあることを指摘しています。ゲーデルの結果を正しく理解していれば、到達不能コードのすべてのクラスをキャッチできるコンパイラはないでしょう。, ユニットテストでは、すべてのバグを検出できるわけではありません。私たちはこれを彼らの価値に対する議論として使用しません。同様に、コンパイラは問題のあるコードをすべてキャッチすることはできませんが、可能であれば不正なコードのコンパイルを防ぐことは依然として価値があります。, Java言語の設計者は、到達不能コードをエラーと見なします。したがって、可能な場合はコンパイルを防止するのが妥当です。, (反対票を投じる前に:問題は、Javaに到達不能なステートメントコンパイラエラーがあるかどうかではありません。問題は、 Javaに到達不能なステートメントコンパイラエラーがある理由です。Javaが間違った設計上の決定をしたと思うからといって、私に反対票を投じないでください。), 到達不能なステートメントを許可してはならない明確な理由はありません。他の言語では問題なく使用できます。あなたの特定の必要性のために、これは通常のトリックです:, それは無意味に見えます。コードを読む人は誰でも、それが意図的に行われたに違いないと推測します。残りのステートメントを到達不能のままにするという不注意な間違いではありません。, http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.21, コンパイル時エラーは発生しません。最適化コンパイラは、ステートメントx = 3を認識する場合があります。実行されることはなく、生成されたクラスファイルからそのステートメントのコードを省略することを選択できますが、ステートメントx = 3; ここで指定された技術的な意味で「到達不能」とは見なされません。, この異なる扱いの理論的根拠は、プログラマーが次のような「フラグ変数」を定義できるようにすることです。, アイデアは、DEBUGの値をfalseからtrueに、またはtrueからfalseに変更してから、プログラムテキストに他の変更を加えることなくコードを正しくコンパイルできるようにすることです。, ナニーです。.Netはこれを正しく理解したと思います。到達不能コードに対して警告が表示されますが、エラーは発生しません。警告されるのは良いことですが、コンパイルを妨げる理由はありません(特に、コードをバイパスするためにリターンをスローするのが良いデバッグセッション中)。, Javaの場合、これは実際にはオプションではありません。「到達不能コード」エラーは、JVM開発者が開発者を何かから保護したり、特に警戒したりすることを考えたという事実からではなく、JVM仕様の要件から発生します。, JavaコンパイラとJVMはどちらも、「スタックマップ」と呼ばれるものを使用します。これは、現在のメソッドに割り当てられた、スタック上のすべてのアイテムに関する明確な情報です。JVM命令が、あるタイプのアイテムを別のタイプに誤用しないように、スタックのすべてのスロットのタイプを知る必要があります。これは、数値がポインタとして使用されるのを防ぐために最も重要です。Javaアセンブリを使用して、数値をプッシュ/格納しようとしてから、オブジェクト参照をポップ/ロードすることができます。ただし、JVMは、クラスの検証中、つまりスタックマップが作成され、整合性がテストされているときに、このコードを拒否します。, スタックマップを検証するには、VMはメソッドに存在するすべてのコードパスをウォークスルーし、どのコードパスが実行されるかに関係なく、すべての命令のスタックデータが以前のコードがプッシュしたものと一致することを確認する必要があります/スタックに保存されます。したがって、次の単純な場合:, 3行目で、JVMは「if」の両方のブランチがオブジェクトと互換性のあるもの(ローカルvar#0)にのみ格納されていることを確認します(3行目以降のコードがローカルvar#0を処理する方法であるため) )。, コンパイラが到達不能コードに到達すると、その時点でスタックがどのような状態にあるかが完全にはわからないため、その状態を確認できません。ローカル変数も追跡できないため、その時点でコードを完全にコンパイルすることはできません。そのため、このあいまいさをクラスファイルに残す代わりに、致命的なエラーが発生します。, もちろん、のような単純な条件if (1<2)はそれをだますでしょうが、それは実際にはだまされていません-それはコードにつながる可能性のある分岐を与えており、少なくともコンパイラとVMの両方がそこからスタックアイテムをどのように使用できるかを決定できますオン。, PSこの場合、.NETが何をするのかわかりませんが、コンパイルも失敗すると思います。これは通常、マシンコードコンパイラ(C、C ++、Obj-Cなど)では問題になりません。, コンパイラの目標の1つは、エラーのクラスを除外することです。到達不能コードが偶然に存在します。javacがコンパイル時にそのクラスのエラーを除外するのは素晴らしいことです。, 誤ったコードをキャッチするすべてのルールについて、誰かがコンパイラーにそれを受け入れてもらいたいと思うでしょう。これはコンパイラチェックのペナルティであり、バランスを正しく取ることが言語設計のトリッキーなポイントの1つです。厳密なチェックを行っても、作成できるプログラムの数は無限にあるため、それほど悪くはありません。, このコンパイラエラーは良いことだと思いますが、回避する方法があります。真になることがわかっている条件を使用します。, 必要なことを実行できる限り、コンパイラが厳密であればあるほど良いと文句を言うのは確かに良いことです。通常、支払うべき小さな代償はコードをコメントアウトすることですが、コードをコンパイルすると機能するという利点があります。一般的な例は、テスト/デバッグがメインテストのみで短いものであることに気付くまで人々が悲鳴を上げるHaskellです。私は個人的にJavaでデバッグをほとんど行いませんが、(実際には意図的に)注意を払っていません。, 許可する理由if (aBooleanVariable) return; someMoreCode;がフラグを許可することである場合、if (true) return; someMoreCode;コンパイラtrueはフラグではない(変数ではない)ことを「知っている」ため、コンパイル時エラーを生成しないという事実は、CodeNotReachable例外を生成するポリシーに矛盾があるように見えます。, 興味深いかもしれないが、メソッドのコードの一部をオフにすることには適用されない他の2つの方法とif (true) return:, さて、言う代わりに、jvm引数if (true) return;に言っassert falseて追加-ea OR -ea package OR -ea classNameしたいかもしれません。良い点は、これによりある程度の粒度が可能になり、jvm呼び出しに追加のパラメーターを追加する必要があるため、コードにDEBUGフラグを設定する必要はありませんが、実行時に引数を追加することで、ターゲットがターゲットでない場合に役立ちます。開発者マシンとバイトコードの再コンパイルと転送には時間がかかります。, System.exit(0)方法もありますが、これはやり過ぎかもしれません。JSPのJavaに配置すると、サーバーが終了します。, Javaが設計上「乳母」言語であることは別として、制御を強化するためにC / C ++のようなネイティブのものを使用したいと思います。, Javaもこれについて完全に一貫しているわけではありません。デッドコードを引き起こすいくつかの制御フローについては、Javaは文句を言いません。他の人にとってはそうです。どのコードが死んでいるかを判断することは、計算不可能な問題です。Javaが終了できないものを開始することにした理由はわかりません。, @Gabe:無害ではないので、ほぼ間違いなく間違いです。コードを間違った場所に配置したか、一部のコードに到達できないような方法でステートメントを記述したと誤解したかのいずれかです。これをエラーにすると、誤ったコードが書き込まれるのを防ぐことができます。コード内の到達不能な場所に他の開発者が読めるようにしたい場合(到達不能コードの唯一の対象者)は、代わりにコメントを使用してください。, SamStephens:呼び出されていないメソッドと未使用の変数が本質的にすべての形式の到達不能コードであると考えています。一部のフォームを許可し、他のフォームを許可しないのはなぜですか?特に、なぜそのような便利なデバッグメカニズムを許可しないのですか?, コメントも届きませんか?私の考えでは、到達不能コードは実際にはコメントの形式です(これは私が以前にやろうとしていたことなどです)。しかし、「実際の」コメントも「到達可能」ではないことを考えると...おそらくこのエラーも発生するはずです;), 問題は、彼ら(Java言語設計者)がこれと矛盾していることです。実際のフロー分析がある場合、両方, それでも、あなたが示すトリックに悩む理由がわからない。到達不能コードはコンパイラにとって無意味です。したがって、その対象読者は開発者だけです。コメントを使用してください。一時的に返品を追加する場合は推測しますが、回避策を使用すると、返品を入力して次のコードをコメントアウトするよりもわずかに速い場合があります。, @SamStephensしかし、切り替えたいときはいつでも、コードをコメントアウトする必要がある場所と、その逆を行う必要がある場所をすべて覚えておく必要があります。ファイル全体を読み通し、ソースコードを変更する必要があります。おそらく、ある場所で「true」を「false」に置き換えるのではなく、時々微妙な間違いを犯します。スイッチングロジックを一度コーディングして、必要な場合以外は触れない方が良いと思います。, 「コードを読む人は誰でも、それが意図的に行われたに違いないと推測するでしょう」。これはまさに私の意見の問題です。人々は推測するべきではなく、理解する必要があります。コードを覚えることは、コンピューターへの指示だけでなく、人々とのコミュニケーションです。非常に一時的なもの以外の場合は、私の意見では構成を使用する必要があります。上に表示されているものを見ると, このトリックはデバッグに非常に役立ちます。失敗している場所を見つけようとするメソッドの「残りの部分」を排除するために、if(true)リターンを追加することがよくあります。他にも方法がありますが、これはクリーンかつ迅速である-それはあなたが今までにチェックインすべきものではありません。, javaは以前に設計されたもので、当時は各バイトがカウントされていましたが、フロッピーディスクはまだハイテクでした。, デバッグアーリーリターンの場合、アーリーリターンに続く行をコメントアウトするのにさらに5秒かかります。到達不能コードをエラーにすることで防止されたバグのためにプレイするための小さな価格。, コンパイラが到達不能コードを除外することも簡単です。開発者にそうするように強制する理由はありません。, @SamStephensは、すでにコメントがある場合はそうではありません。コメントはスタックされないため、コメントでこれを回避するのは不必要な苦痛です。, @SamStephensコメントアウトされたコードはリファクタリングがうまくいきません。, Javaのデッドコード警告システムはどれほど積極的ですか?文法の一部として表現できますか(例:, 私は文法が苦手ですが、そうだと思います。ただし、「停止」はローカルにすることができます。たとえば、ループ内の「break」ステートメントなどです。また、メソッドがvoidの場合、メソッドの終わりはメソッドレベルの暗黙的な停止ステートメントです。'throw'も明示的な停止ステートメントになります。, 見つけるための最良の方法は、それを試してコンパイルすることです。ただし、コンパイラーでは、空のtry / catchステートメントも使用できます。ただし、JVM命令は理論的には例外をスローする可能性があるため、tryブロックは例外を終了する可能性があります。しかし、これがこの質問にどのように関連しているかはわかりません。, 基本的に、問題は、禁止されている「到達不能」ステートメントだけが、実際に式を評価することなく、解析に基づいて到達不能として識別できるステートメントであるかどうか、または標準がのような到達不能ステートメントを禁止できるかどうか, ここでの質問はなぜですか?到達不能コードはコンパイラにとって無意味です。したがって、その対象読者は開発者だけです。コメントを使用してください。, だから私はJavaの人が彼らのコンパイルを設計した方法に同意するので私は反対票を得るのですか?うわあ...–, あなたは実際の質問に答えなかったために反対票を受け取ります。SamStephensのコメントを参照してください。, @Samはその態度で、このサイトのベストアンサーの50%に反対票を投じる必要があります(私の答えがその中にあると言っているわけではありません)。他のITコンサルティングの状況と同様に、SOに関する質問に回答することの大部分は、特定の質問から実際の質問(または関連する副次的な質問)を特定することです。, "i think this line might cause a problem", // compiler isn't smart enough to complain about this.

佐世保 リオ ゆうこ 5, ワン パンマン ネタバレ 176 7, トラベラーズ ドラマ 評価 42, コーンスープ 茶碗蒸し 北斗晶 33, 三井ホーム 価格 実例 5, 北川景子 自宅 住所 15, ハイキュー 占い ツクール 怒る 5, スマブラ シーズン パス 4, ポケモン コハル 嫌い 10, 燈火 灯火 違い 6, ファブル 最新刊 無料 13, さらば青春の光 東ブクロ 相手 13, 誰そ彼 歌詞 Cryamy 7, マクドナルド ハッピーセット 値段 6, アリシア ロドリゲス Wiki 5, We Are Smap 歌詞 コーラス 4, ウイニングポスト ダンスパートナー 産駒 5, 来る 映画 琴子 最後 39, 歌い手 夢小説 男主 12, カローラ スポーツ 4wd 雪道 49, 創作 世界観 作り方 11, 進撃の巨人 コニー かわいそう 11, レイド シルエット 一覧 剣盾 6, ノベルゲーム 作り方 Pc 13, Djdj 届かぬ想い ライブ 24, 会社 全面禁煙 退職 5, Scp 文字数 コンテスト 10, ディーガ 内蔵hdd 認識 しない 4, 佐藤健 8月6日 歌 5, 親子 ですか 英語 4, Tokyo Mx 受信レベル低下 2019 5, 白石会計事務所 熊本 評判 4, 太陽の末裔 ミョンジュ 死 17, Ark テリジノサウルス 採取レベル 11, 別離 離婚 違い 55, 京都 鴨川 ロケ地 4, 福留 2013 なんj 5, 双子 自然分娩 初産 8, 恋愛 勘違い しない ために 49, Claude 名前 意味 8, 地球 自転 なぜ 感じない 19, メッセンジャー 届かない ブロック 24, ドラえもん 声優 今 5, どうぶつの森 ペット 入手方法 7, プロスピ2019 顔コード やり方 56, 北の国から シュウ 手紙北の国から 98 後編 10, フォールアウト76 ファウンデーション デイリー 6, 医 龍 4 桜井院長 6,

Leave a Comment

What Payment Processing Hardware do you Need?