「無」の仕様について

投稿者: 投稿日:2022/05/10(Tue) 19:49:40 No.2148

 お世話になっております。

 下記のサンプルで、以前のバージョンではすべて「○」となっていたのですが、1.7.1131および1.9.1129では「×」になってしまうようです。

----- サンプルソース -----
内容1は、「」
内容2は、{}
(内容1が無)を表示
(内容2が無)を表示
(内容2が{})を表示
--------------------

もし可能でしたら、以前のバージョンと同じような仕様になると助かります。
環境は、Windows11 21H2 64ビット、プロデル 1.7.1131、1.9.1129です。

以上、よろしくお願いいたします。

一部修正しました(1.7.1133)

投稿者:ゆうと 投稿日:2022/05/16(Mon) 20:39:09 No.2160

お世話になっております。

>  下記のサンプルで、以前のバージョンではすべて「○」となっていたのですが、1.7.1131および1.9.1129では「×」になってしまうようです。

無の比較ですが、仕様としては次の通りの結果になります。

1.(内容1が無)を表示 //○
2.(内容2が無)を表示 //× (こちらは以前から×で、正しい結果です)
3.(内容2が{})を表示 //× (以前のバージョンは○でしたが×に仕様変更となります)

1.については、空(文字数が0)の文字列が無と等しいという特別な仕様が歴史的に正しいので
1.7.1133で戻しました。

2.については、×が正しいです。
「無」は「値がない」ことを表す状態です。
「内容2」変数の中身には、要素数が0個であっても配列が入っている状態ですので
無とは異なります。これは正しい挙動です。

3.については、以前のバージョンでは○でしたが
×に仕様変更させて頂きます。(今回発覚しましたので今後ブログに記載します)

配列は、参照型の値ですので、
要素の値や個数が等しくても違う配列となり、比較結果は×となります。

参照型については、ブログの記事に書かれていますので、こちらをご覧下さい。
https://wp.utopiat.net/2020/09/2183/

なお、過去のバージョンと同じように配列どおしの比較をしたい場合は

(内容2の内容が{}の内容)を表示

などとして、文字列型に変換してから比較してください。
(これの比較は過去のバージョンと同じ挙動です)

仕様変更でお手数お掛けしますので
ご了承ください。
ご指摘ありがとうございます。

Re: 一部修正しました(1.7.1133)

投稿者: 投稿日:2022/05/20(Fri) 20:32:27 No.2175

 こんばんは。

 返信が遅くなり、申し訳ありません。

 「(内容1が無)を表示」は、最新版で修正されていることを確認しました。
 ありがとうございます。

 「(内容2が{})を表示」も了解しました。
 配列が空かどうかを調べるのにかなり多用していたので、ぼちぼち手元のプログラムを修正していきます。
 ありがとうございました。

 それでは。

▲ページの先頭へ

- WebForum -