ChatGPT

ChatGPTをプログラミング学習に使ってみた話

更新日:2023-03-04 公開日:2023-03-04

さいきん話題のChatGPTを試してみたのですが、プログラミング学習にとても良いツールだと感じました。
自分が使ってみて、便利だと思った例をいくつか挙げてみます。
言語はtypescriptを題材にしています。

基本文法を簡単に調べられる

基本的な文法で「あれってどうやって書くんだっけな?」となることはよくあります。
そういう時にさっと使えて便利です。
例えばtypescriptでfor文を書く方法を調べる場合は以下のような質問をします。




良い感じに教えてくれました。
追加で配列の要素を繰り返したいみたいに聞くと、forEachメソッドを提案してくれます。


関数を書いてくれる

やりたいことを質問すると、良い感じの関数を書いてくれます。
例えばtypescriptで数字を二つ受け取って足して返す関数を書きたい場合は以下のようにします。


関数のテストコードを書いてくれる

なんとテストコードも書いてくれます。
例えば以下のような累積和を計算する関数を例に挙げます。

// lang=ts
export const accumulate = (items: number[]): number[] => {
    const ret: number[] = []
    if (items.length == 0) {
        return ret;
    };
    ret.push(items[0]);
    for (let i = 1; i < items.length; i++) {
        ret.push(items[i] + ret[i - 1])
    };
    return ret;
};


[1,2,3]と渡すと[1,3,6]と返すようなイメージです。
これのテストコードをjestで作ってもらいましょう。





丁寧に解説もついてきます。便利ですね。


第二言語の学習

私はどちらかというとtypescriptよりもPythonの方が得意です。
そのため、「Pythonのあの関数って、typescriptでどうやるのかな?」と気になることがよくあります。
そういう時にChatGPTを叩くとクリティカルな答えが返ってきます。

例えばPythonではbisect.bisect_leftという便利な組み込み関数があります。
これは値とソート済みの配列を渡して、値が挿入されるべきインデックスを二分探索する関数です。

# lang=python
from bisect import bisect_left

sorted_arr = [1, 3, 5, 7, 9]
print(bisect_left(sorted_arr, 0))
# >> 0

print(bisect_left(sorted_arr, 10))
# >> 5

print(bisect_left(sorted_arr, 3))
# 値が存在する場合は値が最初に表れるインデックス
# >> 1

print(bisect_left(sorted_arr, 4))
# 値が存在しない場合は挿入されるべきインデックス
# >> 2


しかし残念ながらtypescriptには相当する組み込み関数はないみたいです。
ChatGPTに質問してみましょう。



ちゃんと二分探索でコードを書いてくれました。

おわりに

もちろん書かれたコードが間違っているケースもあるでしょう。
しかし、テストコードの生成も組み合わせて検証すれば実用に耐えるのではないかと思います。
(ChatGPTでテストコードも書けますし、足りない所は付け足せばいいです)

以上、ChatGPTを使ってみた例の紹介でした。