HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0324
もみじ型の違う変数の計算と条件分岐5解決


もみじ

リンク

2015/3/24(Tue) 02:19:30|NO.68071

型の違う変数の計算と、その変数を使った条件分岐で、
自分の理解を超える動きをしたので、どなたか解説してくれないでしょうかorz
色々調べましたが、まったくわからなかったです。
疑問点は二つ。以下のスクリプトのコメント部分になります。


repeat redraw 0:color 0,0,0:boxf:color 255,255,255:pos 0,0 a=0 //数値型変数 b="あいうえお" //文字列型変数" c=a+b //二つの変数を計算 mes a+b // 結果は左側の変数の型に合わさり0に。←疑問1 文字列型変数bのABCはどうなったのか? if c="かきくけこ" {mes "条件は真です"} //疑問2 変数cの中身は0なのに、”かきくけこ”をスルーしてifが通ってしまい、内容が表示される redraw 1 : await 15 loop

ヨロシクお願いします。
変数aを1に変えたり、="かきくけこ"を=1に変えると正常に動きますが、これもどういう動作してるのやら・・



この記事に返信する


もみじ

リンク

2015/3/24(Tue) 02:23:18|NO.68072

訂正です。スクリプト内の疑問1は

×疑問1 文字列型変数bのABCはどうなったのか?
○疑問1 文字列型変数bの"あいうえお"はどうなったのか?

です。



もみじ

リンク

2015/3/24(Tue) 02:40:02|NO.68074

変数と型の違うものは計算前に切り捨てられる(使用できない)って認識でいいのかな・・・。
b="あいうえお" は宣言だから問題ない型は関係ない訳で。



GENKI

リンク

2015/3/24(Tue) 02:42:42|NO.68075

「プログラミング・マニュアル」より
> 整数値、実数値、文字列、関数を混在した式を書くことも可能です。 その場合は、計算する最初の項に合わせて、後の項が型変換されます。


a=0 //数値型変数 b="あいうえお" //文字列型変数" c=a+int(b) //二つの変数を計算 mes a+int(b) // 結果は左側の変数の型に合わさり0に。←疑問1 文字列型変数bのABCはどうなったのか? if c=int("かきくけこ") {mes "条件は真です"} //疑問2 変数cの中身は0なのに、”かきくけこ”をスルーしてifが通ってしまい、内容が表示される

型が気になりだしたらステップアップの時期です。
型を意識したプログラムをしてみることをおすすめします。
具体的には、型ごとに変数を使い分ける(同じ変数に数値を入れたり文字列を入れたり混在させない)、HSP側の自動型変換に頼らず自分で型変換する。など。



もみじ

リンク

2015/3/24(Tue) 02:55:24|NO.68077

>>GENKI様
なるほど!
intのヘルプ見て把握しました。
内部的には切り捨ているわけではなくて、ちゃんと型にあわせて0に変換されているのですね。

ありがとうございました。



もみじ

リンク

2015/3/24(Tue) 03:03:25|NO.68078

こういう事も出来るのデスネ。
まぁ、ちゃんと宣言したりしろって感じですけどw


redraw 0:color 0,0,0:boxf:color 255,255,255:pos 0,0 a=0 //数値型変数 b="あいうえお" //文字列型変数" c=a+b //二つの変数を計算 mes a+b // 結果は左側の変数の型に合わさり0に。←疑問1 文字列型変数bの"あいうえお"はどうなったのか? if str(c)="かきくけこ" {mes "条件は真です"} //疑問2 変数cの中身は0なのに、”かきくけこ”をスルーしてifが通ってしまい、内容が表示される redraw 1 : await 15



ONION software Copyright 1997-2021(c) All rights reserved.