背景protobufでは値を省略したときに、その型で定められたデフォルト値が代入されます。stringを省略すると自動的に""を指定したことになり、「値が指定されなかった」のか「空文字列を明示的に入れた」のかを区別しないように書くことが求められます。この仕様は便利なのですが、時には区別したいケースもあります。3のようなテクニックを用いて未指定とデフォルト値を区別することができます。}}2のmessageをがんばって定義する形式は、パラメータが増えるとどんどんmessageが増えて辛くなってしまいます。3は少しトリッキーなのがネックです。ように確認することになるため若干記述量も増します。)wrappers.protoと思ったらprimitive値をラップするものが公式で存在しました。value.とあり、まさに値がない事とデフォルト値を指定されたことを区別することができます。(Anyに値を突っ込むのにも使えるようです。Jsonにマッピングした際にラップを無視して単に1.0や"str"のようなプリミティブな値として表現されるようです。ような冗長なJsonになってしまうので、これを回避できるのは便利そうです。いう表現で特別扱いされていました。transfer.実際に動かしてみると以下のようになります。truejsonの出力ではStringWrapperにあたる部分が簡略化されていることが分かります。emptyの取得ではhasMofuやoneofといったテクニックで値が無いことが確認できます。typesを使えば未指定とデフォルト値を区別することが簡単にできて、なおかつjson変換の際に冗長さを減らすことができます。フィールドが増えたり使いまわされたりするならmessageを定義するのが良いこともあるので、適切に使い分ける必要があるとは思いますが、単純にwrapしたいだけであれば選択肢に入ると思います。不用意にラップすると(クラスが増えるので)ビルド時間が増えたりするといったデメリットがあったりしますし、そもそものprotobufの設計思想から若干それているような気がしなくもないので第一選択肢としてはデフォルト値を利用する戦略を取るのが望ましい気がします。11:00Tweet広告を非表示にする関連記事2017-06-11TwitterのFutureについてのざっくりまとめ基本的に以下からそのまま取ってきています。»プロフィール間違ったことが書いてあったら@matsu_charaまでご連絡ください。Languageに入門(3)はてなブログをはじめよう!matsu_charaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。