トリッキーコードネット トップへ戻る   C/C++, Java, Perl, PHP, JavaScript, アルゴリズム, ショートコーディング, IOCCCコードの解説, 等々

サイト情報

トリッキーなコード

7行プログラミング

物凄いコード集

アルゴリズム

データ構造

C/C++な話題

コードサンプル

ツール/環境構築

開発ノウハウ 等

ネタ/ジョーク集

おススメ書籍/サイト

サイトTOP >> 開発ノウハウ 等 >> 4.インタプリタ言語のデータ型処理に対する認識不足

4.インタプリタ言語のデータ型処理に対する認識不足編

バグが発生しやすい王道パターン - 3.コンパイラ言語のデータ型処理に対する理解不足編の続きです。

プログラミングにおいて、『 こういった時(こういった箇所)でバグが発生しやすいぞ~ 』というのを纏めてみました ^^;)
(※あくまで管理人の独断と偏見、それに、少々の経験に基づいたものですのであしからず)

さて、コンパイラ言語に比べ、データ型が非常に曖昧なインタプリタ言語ですが、
異なるデータ型の演算時には、コンパイラ言語同様、内部で暗黙の型変換を行っています。

・・・これがまれに、バグの温床になっていたりもします。

以下にその例を挙げます。

[PHP]
①in_array($val, $arr)
②in_array("{$val}",$arr) 
$val変数の内容によっては、①と②で、戻り値が異なるケースがあります。
[ASP]
Dim a
Dim b

a = 10
b = "10"

If (a = b) Then
    Response.Write("True")
Else
    Response.Write("False")
End If
↑実行結果は、Falseが表示されます。 Trueを表示させるには、 CIng,CLng,CStr関数 等で型を一致させてから比較する 必要があります。 またASPでは、 値がNullの変数にCLng, CInt, CStr関数 等を使用すると、ランタイムエラーが発生 します。 (※データベースから取得した値を成型する場合 等は、特に注意する必要があります。←以前それで泣いた経験有 ToT) これを防止する為には、まずIsNull関数で値が入っている事を確かめた上で、型を一致させる手順を行います。 以下の様なFunctionを準備しておくと、もしかしたら役に立つかもしれません。
Function myCLng(ByVal val)
    If IsNull(val) Then
        myCLng = 0
    Else
        myCLng = CLng(val)
    End If
End Function


Function myCInt(ByVal val)
    If IsNull(val) Then
        myCInt = 0
    Else
        myCInt = CInt(val)
    End If
End Function


Function myCStr(ByVal str)
    If IsNull(str) Then
        myCStr = ""
    Else
        myCStr = CStr(val)
    End If
End Function

バグが発生しやすい王道パターン - その5 へと続く(予定w)
         このエントリーをはてなブックマークに追加   


作業効率化・ライフハックのオススメ記事




コンピュータ・テクノロジーのオススメ記事





恋愛・人間関係のオススメ記事




※ 当サイトは、トップページからリンクで辿る事の出来るページに限り、リンクフリーです。
※ 当サイトの閲覧/利用によって生じた如何なる損害も、当サイト管理人は責任を負いません。
※ 当サイトの内容を転載される場合は、当サイトへのリンクをお願い致します。