プログラマー VTuber 衣亥栖ティオのちょっとした話

Youtubeに投稿したプログラミング学習動画の補足説明をするためのブログです。

プログラマーへの道 #140 の補足説明

こんにちは、プログラマーVTuberの衣亥栖ティオです。 この記事はYouTubeに投稿した動画の補足ブログです。

投稿した動画

今回は以下の動画の補足説明をします。


GitHub のURL

私のGitHubは以下です。
https://github.com/tio-iis

Gist のURL

私のGitst(メモ書きみたいなもの)のURLは以下です。
https://gist.github.com/tio-iis

今回の動画で実装したソースコード

今回の実装は以下です。
https://github.com/tio-iis/memo-server/pull/53/files

現時点でのソースコードは以下です。
https://github.com/tio-iis/memo-server/tree/d5afcc25f5908205c168767f41dd37f57a64f1b1

補足内容

バリデーション時に警告ログを出力している件について

動画内で以下の警告ログを出力する実装を追加しました。
https://github.com/tio-iis/memo-server/pull/53/files#diff-2873f79a86c0d8b3335cd7731b0ecf7dd4301eb19a82ef7a1cba7589b5252261R221

しかし、メモ帳アプリでは以下のようにバリデーション時に警告ログを出力するという方針で実装しています。
https://github.com/tio-iis/memo-server/blob/d5afcc25f5908205c168767f41dd37f57a64f1b1/main.go#L78

なので、今回の実装で追加した警告ログの出力は間違いです。 正しくは以下の場所で警告ログを出力する必要があります。
https://github.com/tio-iis/memo-server/pull/53/files#diff-2873f79a86c0d8b3335cd7731b0ecf7dd4301eb19a82ef7a1cba7589b5252261R127-R132

この問題は次回の動画で修正予定です(修正予定というか、動画内でこの問題に気づいてその場で修正しているだけですけど・・・)。

GoのMemos構造体とJavaScriptのMemosクラスについて

今回の動画では登録されたメモの管理とバリデーションを実装するためにMemos構造体を実装しました。 Memos構造体はフィールドとしてMemo構造体のスライスを保持します。 実は既存のJavaScript側の実装でも同じような発想でMemoクラスとMemosクラスを実装しています。
* https://github.com/tio-iis/memo-server/blob/5498711517a18d31fbc96b86f8ac81304cf03994/index.html#L125 * https://github.com/tio-iis/memo-server/blob/5498711517a18d31fbc96b86f8ac81304cf03994/index.html#L274

GoとJavaScriptは異なるプログラミング言語ですが、特定の値を管理するためにクラスや構造体を利用するという方針は同じなんですね。 プログラミングにはこういった"どのプログラミング言語でも共通して利用できるテクニック"があるので、 こういったテクニックを身につけることができると、 エンジニアとしてスキルの幅が広がると思います。

Memos構造体のAddMemo()メソッド内でMemoクラスのバリデーションをする件について

動画内ではMemo構造体のValidate()メソッドをMemos構造体のAddMemo()メソッドで実行しています。 動画内でも言及しましたが、これは登録しようとしているメモが仕様(例えばタイトルは30文字以下にするとか)を満たしていることを確実に保証するためです。

メモを登録するにはMemos構造体のAddMemo()を実行する必要があるので、 AddMemo()内でMemo構造体が問題ないことを確認した方が確実に仕様を満たしていることを保証できます。

一方で以下の実装のようにAddMemo()以外の場所でMemo構造体のValidate()メソッドを実行する設計にしてしまうと、 開発者は"AddMemo()を実行する前にMemo構造体のValidate()メソッドを実行する必要がある" というルールを覚えなければいけません。 複数の開発者でこの情報を共有するのは難しいので、自然にValidate()メソッドが実行されるようにAddMemo()メソッド内に配置する方がいいでしょう。

ただし、この方針はあくまで今回のメモ帳アプリの場合であって、他のWebアプリケーションでは異なる場合があります。 ここらへんはまた別の機会に言及しようと思います。

Goのbreakについて

動画内では以下でbreakをしています。 https://github.com/tio-iis/memo-server/pull/53/files#diff-2873f79a86c0d8b3335cd7731b0ecf7dd4301eb19a82ef7a1cba7589b5252261R132

break は途中でforのループを抜けるために利用する構文です。 重要なので覚えておきましょう。 他にもforのループを先に進めるcontinueという構文もあります。 これも覚えておきましょう。
https://dev-yakuza.posstree.com/golang/for-statement/#continue%E3%81%A8break