内海新聞のブログ

1996年創刊の我が国最初の電子新聞

1798:AIとプログラミング技術の議論してみた

 ChatGPTの本領はITプログラミングにあるそうです。ふーん。試しに、プログラマーでもある自分がちょっと「難しい話」をAIにしてみました。

ところが……なんとまあ

■関数で複数の値を返せるか?
私:現状のプログラミング限度は、関数をつくると複数の値を返せないが、できるようにした言語はあるか?

AI:現在の多くのプログラミング言語では、関数は一つの値を返すように設計されていますが、一部の言語では複数の値を返すことができます。

例えば、Pythonでは、複数の値を返すことができます。以下は、2つの値を返す関数の例です。

ruby
def get_values():
    return 10, 20
この関数を呼び出すと、2つの値がタプルで返されます。

また、C言語C++では、関数から複数の値を返すために、ポインタを使用することができます。以下は、2つの値をポインタで渡す関数の例です。

java
void get_values(int *x, int *y) {
    *x = 10;
    *y = 20;
}
この関数を呼び出すと、2つの値がポインタで渡された変数に格納されます。

一方、関数から複数の値を返すためにタプルやポインタを使用することは、コードの複雑さやバグのリスクを高めることがあります。そのため、近年では、関数型プログラミングの手法を採用することで、複数の値を返すことができる言語が登場しています。

■ふーん、できるんだ。じゃあギア上げてみようか?
私:そのやり方は、美しくないね。オブジェクトで返せないの?

AI:一般的な関数では複数の値を返すことはできませんが、Pythonなどの言語では、タプルと呼ばれる複数の要素を持つデータ型を使用して、複数の値を返すことができます。また、オブジェクトを返す関数を定義することもできます。オブジェクトを返すことで、より構造化されたデータを扱いやすくしたり、オブジェクト指向プログラミングのメリットを享受することができます。

私:オブジェクトを返す例を何か示してみて

AI:オブジェクトを返す例として、JavaScriptのコードを示します。

例えば、以下のような関数は、オブジェクトを返すように設計されています。

javascript
function getPersonInfo() {
  const name = "John";
  const age = 30;
  const job = "Engineer";

  return { name, age, job };
}
この関数は、name、age、job の3つの変数を持ち、これらの値をプロパティとして持つオブジェクトを返します。このようにすることで、関数から複数の値を一度に返すことができます。

関数を呼び出してオブジェクトを受け取るためには、以下のようにコードを書きます。

javascript
const personInfo = getPersonInfo();
console.log(personInfo.name); // "John"
console.log(personInfo.age); // 30
console.log(personInfo.job); // "Engineer"
このように、関数から返されたオブジェクトのプロパティにアクセスすることができます。

■なかなかやるね。深く聞いてみようか
私:return で 3つの要素を明示する必要あるの?オブジェクトのシンボルを返せば済むようにするべきだろう?

AI:オブジェクトのシンボルを返すこともできますが、その場合でも何らかの形でシンボルの値を明示する必要があります。たとえば、Rubyでは、次のようにハッシュを返すことで、複数の値を一つのオブジェクトとして扱うことができます。

ruby
def get_person_info
  { name: "John", age: 30, occupation: "programmer" }
end
このように、複数の要素を持つオブジェクトを返すことで、関数が返す値を明確にすることができます。

私:これができるんだったら、ビジュアルでプログラミングをアイコンの組み合わせとフロー設計できると思うんだけどな。なんでやらないの?

AI:ビジュアルプログラミングのアイデアは、すでに多数のプログラミング言語や開発環境で実現されています。代表的なものとしては、Scratch、Blockly、Node-RED、LabVIEWなどがあります。これらの開発環境では、アイコンやブロックなどのビジュアルな要素を組み合わせて、プログラムを作成することができます。

ただし、全てのプログラムをビジュアルプログラミングで記述することはできないため、いくつかの制限があります。例えば、大規模で複雑なシステムや高度なアルゴリズムを扱う場合は、ビジュアルプログラミングだけでは十分ではありません。

また、ビジュアルプログラミングに慣れていない人にとっては、テキストベースのプログラミングの方が使いやすい場合もあります。そのため、ビジュアルプログラミングが一般的になっていない理由の1つに、開発者やユーザーの技術的なスキルや好みの違いがあることが挙げられます。

■プログラミング論もできる
私:でも、部品をアイコン化してプロパティを埋めるだけにした方が、大規模システム開発では判読性もメンテナンス性も人員の交代でもシステムの信頼性が大幅に上がるし、合理的なプログラミングができるはずだが。

AI:確かに、ビジュアルでプログラミングを行うことで、部品をアイコン化してプロパティを埋めることができ、コードを書くよりも効率的で正確なプログラミングが可能になると考えられます。ビジュアルプログラミングツールには、Visual Basic、Scratch、Blockly、LabVIEWなどがあります。これらのツールは、特に初心者にとって、プログラミングに関する専門知識がなくても、簡単に使うことができるように設計されています。

ただし、ビジュアルプログラミングにも欠点があります。例えば、大規模なシステムの開発では、アイコンの数が増えすぎて、そのアイコンの動作を理解するのが難しくなることがあります。また、複雑なロジックを表現するのには、文字ベースのプログラミングよりも効率が悪くなることもあります。
ーーーーーーーーーーーーーーーーーーーーーーーーーー
なかなかすごいね。人間みたい。

というか、人間越えていくのが実感される。
1年、2年経ったら……相当なレベルになると思う。

(内海君:小市民)