Skip to content

Conversation

@hroc135
Copy link
Owner

@hroc135 hroc135 commented Jan 8, 2025

### CS
- slices.Maxの実装確認
- https://cs.opensource.google/go/go/+/refs/tags/go1.23.4:src/slices/sort.go;l=95
- 空リストの入力に対してpanicすることが意外だった。単にerrorを返すだけでもいい気がしたがなぜ??
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

返り値をペアにして、第2引数をエラーにするということでしょうか。
Go は Exception がないんですよね。

Go 言語の思想は、私は Google 社内 C++ に影響を受けていると思っています。
Exception はコントロールフローが煩雑になるので好まれません。巨大なコードベースが読めなくなります。
マイクロサービスがたくさんある環境では、FATAL でプロセスが死んでくれると、何が起きているかを外から見ることができてむしろ便利です。

空なことが分かっているのに min, max を呼ぶこと自体が、配列外アクセスに相当するという感覚でしょうか。

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ありがとうございます。一応背景がわかったつもりになりました。大規模コードベースをあまり触ったことのない自分にとってはまだピンとこない部分もありますが、ドキュメントにもあるように「ひどい目」にあった時に思い出せるようにします

あと、よく考えたらslices.Maxでerrorを返すのは変ですね

maxElem, err := slices.Max(s)
if err != nil {
    log.Fatal("empty slice")
}

とするくらいだったら呼ぶ前に空かどうか確認しますね

- n: len(nums)
- 時間計算量: O(n)
- 空間計算量: O(1) (スライスのコピーは作成されないので)
- テストケース
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

テストケース、もう少しバリエーションがある気はします。
[10, 1, 1, 10, 1]
2連続で入らない場合とか。

あとはいいと思います。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants