プチコン3号で型判定

  • tags
    • petitcom
  • last modified2015-02-22
  • created2015-02-08

概要

miiverseで話題に出した所,最終的に配列以外の型判定が可能なことがわかったのでそのまとめ.

https://miiverse.nintendo.net/posts/AYMHAAACAAADVHik417LRg

解説

次のような流れになる.

  • 0か空文字列/文字列か数値判定
  • 文字列/数値判定
  • 実数/整数判定

実際のコードは次のようになる. なお動作確認してない.

DEF TYPE_DETECT$(X)
 VAR INF#
 ' 0倍して同じになるのは,0もしくは空文字列の場合
 IF X==X*0 THEN
  ' 0*infinity は NaNになることを利用して空文字列か数値の判定
  ' ""*infは""に,NaN==NaNはfalseになる
  INF#=POW(2,1024)
  IF X*INF#==X*INF# THEN RETURN "$"
  ' 0の場合は,整数/実数判定へ
 ELSE
  ' 文字列/数値判定
  ' 文字列*数値の場合,数値は整数に変換してから処理されることを利用してX*1.5し結果を見る.
  ' 文字列とinfinityの場合 X*1.5==X が trueになる
  IF X*1.5==X THEN
   ' 文字列/inf判定
   ' infinity*0はNaN.NaN==NaNはfalse
   IF X*0==X*0 THEN RETURN "$"
   RETURN "#"
  ENDIF
 ENDIF
 ' 整数/実数判定
 ' 0.5を代入してみて整数かどうか確認する
 X=0.5
 IF X==0 THEN RETURN "%"
 RETURN "#"
END

雑感

こういうの作っておいて何だけど, 関数の引数/返値に使われる変数は, サフィックスに関係なく代入された値によって型が決まるという仕様は正直どうかと思う. あまりにも初心者殺しすぎるかと…….