トピック
Ϊċăņ ďо įт hikahikaru3
defの引数の形で
0そうだね
プレイ済み
返信[1]
親投稿
しんしん manashi3
文字をバイナリ化か、数字を文字列化する事しか思いつかない。 他のプロの人なら思い付くのかな・・・
0そうだね
プレイ済み
返信[2]
親投稿
otta777 otta777a
ユーザー定義命令内で変数の型に依存しない処理をする場合は 数値配列変数としてユーザー定義命令内で記述しても問題無いようです。 ぱっと思いついたのはPRINT命令での表示、LEN関数の引数にする位ですが。 DEF命令のヘルプにも引数の厳密な型チェックは行わないと記述されています。 例えば DEF FUNC A PRINT A[0] END と定義して DIM A[5],B$[5] A[0]=5:B$[0]="STR" FUNC A FUNC B$ としてもエラーにはならず配列変数の要素番号0の内容を表示します。
0そうだね
プレイ済み
返信[3]
親投稿
おちゃめ ochame_nako
プチコンBIGやプチコン3号のDEFによる自作命令、自作関数の引数は代入された時点で型が決定します。 DEF X2(A) RETURN A*2 END このX2関数においてAというのはX2(123)のように数値を入れた場合には変数Aは数値変数となり、X2("ABC")のように文字列を入れた場合には変数Aは文字列変数になります。 そのためX2関数は数値でも文字でも正しく動作します。 引数の変数に付ける「$」や「%」や「#」というサフィックス(接尾辞)記号はただの飾りということです。 より詳しく知りたい場合は下記のトピックスを見てください。 https://miiverse.nintendo.net/posts/AYMHAAACAAADVHjYtPmLxg
0そうだね
プレイ済み
返信[4]
親投稿
おちゃめ ochame_nako
このX2関数のように数値でも文字でも2倍するということは可能なので問題はないですが、数値と文字列では同じ処理が難しい場合もあるでしょう。 その場合には数値を入れたら数値用の処理、文字列を入れたら文字列用の処理をすれば問題ありません。 これには引数が数値か文字列かを判断する必要がありますが、私の自作関数SUFFIXを使えば簡単に実数型か整数型か文字列型かが判断可能になります。(これは私が見つけた文字列と数値の比較演算は3を返すという裏技を有効活用している) SUFFIX関数 https://miiverse.nintendo.net/posts/AYMHAAADAAB2V0fSfxRUkA
0そうだね
プレイ済み
返信[5]
親投稿
おちゃめ ochame_nako
引数に入れた値が数値か文字列かでプログラムを完全に分けるのではなくある程度共用したいという場合には数値でも文字列でも入る変数が必要になる場合があります。 それは私の自作関数INITを使えば数値でも文字列でも入る万能変数を作れるのでそれを活用すれば良いです。 INIT関数は上記のようにDEFの引数は代入した時点で型が決まるというのと配列が参照型であるというのを用いて作った関数です。 INIT関数 https://miiverse.nintendo.net/posts/AYMHAAACAAADVHkoSL6eyA これらを使えば引数が数値だろうと文字列だろうと自由な命令や関数を作ることが可能になります。
0そうだね
プレイ済み
返信[6]
親投稿
Ϊċăņ ďо įт hikahikaru3
なるほど、参考になりました。 色々試行錯誤してみます。
0そうだね
プレイ済み