https://dev.mikutter.hachune.net/
https://dev.mikutter.hachune.net/favicon.ico?1619448608
2018-02-11T03:46:11Z
やること
mikutter - 最適化 #1170: form dslのoptionの引数の順序の統一
https://dev.mikutter.hachune.net/issues/1170?journal_id=2982
2018-02-11T03:46:11Z
あひる 家鴨
<ul></ul><p>valueに与えられるのは Symbol とは限らないということを失念していました。<br />他の判別方法を模索します。</p>
mikutter - 最適化 #1170: form dslのoptionの引数の順序の統一
https://dev.mikutter.hachune.net/issues/1170?journal_id=2993
2018-02-13T01:58:27Z
あひる 家鴨
<ul></ul><p>value に String が入ってくると、それが value なのか label なのかの判断がつかない問題に直面した。<br />なんか他にうまく統一できる方法はないだろうか。</p>
mikutter - 最適化 #1170: form dslのoptionの引数の順序の統一
https://dev.mikutter.hachune.net/issues/1170?journal_id=2995
2018-02-13T05:15:39Z
toshi_a 初音
toshi.alternative@gmail.com
<ul></ul><p>統一することには賛成ですが、たしかに互換性は必須ですから、難しいですね。 <a class="issue tracker-6 status-1 priority-4 priority-default" title="最適化: form dslのoptionの引数の順序の統一 (新規)" href="https://dev.mikutter.hachune.net/issues/1170#note-2">#1170-2</a> のとおり、値のclassを見てスワップすることはできないため、ルール自体に互換性のある変更をすることを思いつきました。二つ提案しますが、個人的にはどちらかといえばキーワード引数を推します。他に良い方法があるかな。</p>
<a name="キーワード引数を利用"></a>
<h1 >キーワード引数を利用<a href="#キーワード引数を利用" class="wiki-anchor">¶</a></h1>
<p>全てのウィジェットにキーワード引数としてlabelを追加します。valueでなくlabelをキーワード引数にするのは、labelが必須ではないからです。<br />キーワード引数を使えば、labelを受け取ることができない一部のウィジェットで引数のインデックスがずれていて気持ち悪いという問題を回避できます。実装が複雑になってしまいますが、引数の数を見て以前のような記述でも動くようにはできる気がします。</p>
<pre><code class="ruby syntaxhl"><span class="nb">select</span> <span class="ss">:key</span><span class="p">,</span> <span class="ss">label: </span><span class="s2">"選んでください"</span> <span class="k">do</span>
<span class="n">option</span> <span class="ss">:left</span><span class="p">,</span> <span class="ss">label: </span><span class="s2">"左"</span>
<span class="n">option</span> <span class="ss">:right</span><span class="p">,</span> <span class="ss">label: </span><span class="s2">"右"</span>
<span class="k">end</span>
<span class="c1"># inputなど、他のウィジェットもすべてoptionalな名前付き引数に対応させる</span>
<span class="n">input</span> <span class="ss">:free_text</span><span class="p">,</span> <span class="ss">label: </span><span class="s2">"あ"</span>
</code></pre>
<a name="新しいメソッドを定義する"></a>
<h1 >新しいメソッドを定義する<a href="#新しいメソッドを定義する" class="wiki-anchor">¶</a></h1>
<p>optionメソッドの引数の順序を入れ替えた新しいメソッドを定義し、今後はそちらを利用することにします。</p>
<p>シンプルな実装で引数の順序を入れ替えられますが、selectとoptionというのはHTMLをオマージュしてこのような名前になっているため、option以外の良い名前がないという問題があります。</p>
mikutter - 最適化 #1170: form dslのoptionの引数の順序の統一
https://dev.mikutter.hachune.net/issues/1170?journal_id=2996
2018-02-13T23:25:21Z
あひる 家鴨
<ul></ul><p>提案ありがとうございます。<br />二つの提案を比べてみるとキーワード引数の方がよさそうです。</p>
<blockquote>
<p>キーワード引数を利用</p>
</blockquote>
<p>しっくりきました。<br />インデックスずれについては盲点でしたが、この実装によって回避できるのはいいですね。<br />大まかな実装の手段としてはこちらで一旦書いてみようと思います。<br />適当にどれかのウィジェットで仮実装して他に考慮すべき点があるか確認をして、なければウィジェット全体に適用して見たいと思います。</p>
<blockquote>
<p>新しいメソッドを定義する</p>
</blockquote>
<p>optionはそれ以上にいい名前がなさそう、かつ今の名前がフィットしているので、できるなら今の名前を引き継ぎたいです。</p>