私が歌川です

@utgwkk が書いている

C103 2日目東U49bで「Goのリフレクションと向き合う」という本を出します

なんと原稿ができたので告知記事になります。正確にはまだ注文完了してないのでハラハラ状態ですね。

tl;dr

  • C103 2日目 (日曜日) 東U49b (東2ホール)
  • サークル「文化的生活」
  • 本文42ページ
  • 500円
  • キャッシュレス対応

概要

この本は、Goのリフレクションと向き合う本です。

Goにおけるリフレクションの基本に触れて、リフレクションを用いたライブラリを実際に作る過程をなぞることで、リフレクションについて知るのが目標の1つです。

もう1つの目標は、リフレクションを銀の弾丸だと思い込まないことです。 リフレクションによってプログラムの表現力を高めることはできるが、そのぶん気にかけるべきことが一気に増える、ということをこの本では繰り返し伝えています。ジェネリクスの導入によってリフレクションを使わずに書けるコードが増えたというのもありますね。

リフレクションについて知り、適切な距離感を意識しながらリフレクションを活用できるようになってほしい、という思いを込めて書きました。あとは締切のことも考えながら書いていました。

目次

  • はじめに
    • この本について
    • 本書の構成
    • 意見・感想など
  • 第1章 リフレクションを使う前に
    • リフレクション、必要?
      • リフレクションは銀の弾丸ではない
      • リフレクションを使わない
      • コード生成を活用する
      • ジェネリクスを活用する
      • ライブラリを探す
      • コードをメンテナンスする覚悟を持つ
    • ようこそリフレクションへ
  • 第2章 リフレクション入門
    • reflectパッケージ
    • リフレクション用のデータに変換する
    • カインド
    • Valueがvalidかどうか確かめる
    • Valueがnilかどうかを確かめる
    • Valueをランタイムの値に戻す
    • Typeのゼロ値を得る
    • ポインタが指すValue/Typeを得る
    • Valueのポインタを取得する
    • Valueの値を変更する
    • structのフィールドを取得する
    • structのフィールドの型情報を取得する
    • struct tagの値を取得する
  • 第3章 リフレクションレシピ
    • interfaceに対応するTypeを取得する
    • 再帰的にデリファレンスする
    • omitempty
    • omitnil
    • ジェネリックな型のType
  • 第4章 実践リフレクション
    • 作るもの
    • 関数のシグネチャを考える
    • structのフィールドを詰め替える
    • struct tagに対応する
    • 再帰的にstructをmapに変換する
    • 完成
  • 付録A structuremapライブラリの全体実装
  • おわりに

サンプル

第1章「リフレクションを使う前に」の文章を一部抜粋してサンプルといたします。そして、この本でいちばん伝えたいことはだいたいここに収まっています。

リフレクションは銀の弾丸ではない

リフレクションが夢の道具に見えているのであれば、いったん深呼吸することをおすすめします。後述するように、リフレクションは確かにプログラムの表現力を高めますが、代償としてコンパイル時に検査・保証される性質を自分で確かめながら実装する必要があります。また、リフレクションを使わないプログラミングに比べると実行時のパフォーマンスがどうしても落 ちてしまいます。

リフレクションを使わない

まずは、リフレクションをまったく使わずに実装できないか考えてみましょう。

解くべき問題がそこまで複雑ではないのであれば、愚直に書くだけで事足りるのではないでしょうか。入力が数パターンしかないなら素直に書いてもメンテナンス可能な範囲に収まるでしょう。

リフレクションを使わなくとも、よく知られたプログラミング手法やデザインパターンが適用できるかもしれません。

(中略)

コードをメンテナンスする覚悟を持つ

リフレクションを用いたプログラムをメンテナンスするには、当然ですがリフレクションに関する知識が求められます。普通にGoを書いているだけでリフレクションについて意識することはなく、また普段のプログラミングとは毛色の違うコードになるので、他の人から見たときの認知負荷はどうしてもあるでしょう。

とくに業務におけるコードでは、リフレクションによる複雑さが課題を解くことの嬉しさよりも上回っていないか、じゅうぶんに検討するべきです。自分がいなくなった後もコードをメンテナンスできるか、あるいはいきなりコードを見せられてメンテナンス可能な範囲に収まっているか、気をつけましょう。

キャッシュレス対応

各種クレジットカード (Visa/Mastercard/Amex/JCB/Diners Club/Discover) のタッチ決済に対応しています。

現金支払いにも対応していますが、キャッシュレス支払いのほうが後から記録を正確に見返しやすいのでありがたいです。

よろしくお願いします

12/31 (日) 東U49b サークル「文化的生活」でお会いしましょう。めちゃくちゃ年の瀬ですがよろしくおねがいします。

サークルカット
サークルカット