これは答えではありませんが、dbenhamの答えへの返信としての大きなコメントです。
この問題についての私の見解は、dbenhamsの見解とは正反対です。私の意見では、バッチトピックへの回答では、特に初心者の場合は非常に簡潔で明確であり、問題の解決に役立つ最小限の情報を提供する必要がありますが、回答を圧倒して混乱させないようにする必要があります。バッチで配列をシミュレートする方法は2つあります。下付き文字を囲むために広く使用されている角かっこを使用するかどうかですが、どちらの場合も概念は同じです。数値インデックスを使用して同じ名前の変数のリストから特定の要素を選択します。 。
角かっこを使用しないと、初心者はコアコンセプトを理解できません。代わりに、バッチファイルが問題を解決するために「奇妙なトリック」を使用したと考えるかもしれません。一方、経験豊富なプログラマーは、確かに「これは配列ですが、別の方法で記述されています」と言うでしょう。この機能を他の別のものと間違える方法はなく、他の別のものに偽装する理由もありません。
角括弧を使用すると、初心者は「配列」の概念に関する大量の情報と、このトピックに関する多くの例を多くのプログラミング言語で見つけることができます。もちろん、バッチファイルですぐに使用できるプログラミング言語に依存しない説明もあります。 。この場合の角括弧の使用は、そうしないことよりもはるかに明確です。ただし、一部の人々は、これらの利点は、バッチが「正式にアレイをサポートしている」と仮定するという「混乱」に値しないと考えています。
私の意見では、この問題の中心は、バッチが正式に配列をサポートしているかどうかを議論することではなく、誰でも配列の概念を使用してバッチファイルのデータを操作できるという事実です。バッチがアレイを適切にサポートしていると考える人、特に初心者の可能性については、まったく問題はありません。配列管理はプログラミング言語によって異なるため、バッチの詳細の説明が必要になります。しかし、この主題についてのより正式な議論が重要であると思われる場合は、別の例を述べたいと思います。
Cプログラミング言語が入出力操作を「正式にサポート」していないことをご存知ですか?デニス・リッチーがそれを考案したとき、彼はコンパイラーを小さくコンパクトに保つために、これらの操作を言語設計の外に特別に残しました。これは、Cプログラムでデータの読み取り/書き込みができないことを意味しますか?もちろん違います!これは、これらの操作が関数ライブラリを介してコンパイラの外部で実装されることを意味します。したがって、Cコンパイラを開発する必要がある場合、PRINT、READ、またはその他のI / Oステートメントは存在しないため、コンパイル方法について心配する必要はありません。 C言語で!
おもしろいですね。
したがって、初心者が「C言語でメッセージを書く方法は?」と尋ねる場合、正しい答えは次のようになると思いますか。「できません。C言語は正式にはI / Oステートメントをサポートしていませんが、できます。ライブラリ関数を介してそのような操作をエミュレートしますか?」もちろん違います!ほとんどの人はprintfの説明に答えるだけですが、実際にはprintf()がC言語の一部ではないとは誰も言及しておらず、これは正しいと思います。最終的な分析では、C言語がI / O操作をサポートしていると誰かが考える場合の問題は何ですか?実装方法に関係なく、CプログラムでI/O操作を使用できます。
さて、私の謙虚な意見では、バッチの配列の場合にも同じアプローチを使用する必要があります。
おそらくもっと近い例はこれです:「バッチでの算術演算」について多くの質問があり、答えは通常「set /A
コマンドを使用する」です。「バッチファイルは数値変数をサポートせず、文字列のみをサポートしますが、算術演算はset /A
コマンドなどのいくつかの方法でエミュレートできます」という答えは見たことがありません。なんで?バッチの配列について意見を述べるとき、純粋主義者は「より純粋主義者」であるように見えますが、数値などの他のトピックについては気にしません。「バッチは配列をサポートしていない」という頻繁な説明の目的がよくわかりません。
ユーザーrojoはこの点について意見を述べました:
これは、質問者が解決しようとしている問題の解決策を提供しない衒学的な議論です。
(この回答の上にある彼の完全なコメントを参照してください)。