プロジェクト

全般

プロフィール

最適化 #1170

未完了

form dslのoptionの引数の順序の統一

あひる 家鴨 さんがほぼ7年前に追加. ほぼ7年前に更新.

ステータス:
新規
優先度:
通常
担当者:
-
対象バージョン:
開始日:
2018-02-11
期日:
進捗率:

0%

プラグイン名:

説明

Gtk::FormDSL::Select の持つ option の引数が value, label の順序になっている。
formの持つ他のウィジェットの引数は label, value になっているため、統一したい

考えている実装方法としては以下の通り
  1. option(value, label = nil) から option(label = nil, value) に変更する
  2. 互換性の維持のために第一引数に symbol が与えられている場合は、何かしらの警告を出しつつメソッド内で順序を入れ替えて、変更前のものが動くようにする

あひる 家鴨 さんがほぼ7年前に更新

valueに与えられるのは Symbol とは限らないということを失念していました。
他の判別方法を模索します。

あひる 家鴨 さんがほぼ7年前に更新

value に String が入ってくると、それが value なのか label なのかの判断がつかない問題に直面した。
なんか他にうまく統一できる方法はないだろうか。

toshi_a 初音 さんがほぼ7年前に更新

統一することには賛成ですが、たしかに互換性は必須ですから、難しいですね。 #1170-2 のとおり、値のclassを見てスワップすることはできないため、ルール自体に互換性のある変更をすることを思いつきました。二つ提案しますが、個人的にはどちらかといえばキーワード引数を推します。他に良い方法があるかな。

キーワード引数を利用

全てのウィジェットにキーワード引数としてlabelを追加します。valueでなくlabelをキーワード引数にするのは、labelが必須ではないからです。
キーワード引数を使えば、labelを受け取ることができない一部のウィジェットで引数のインデックスがずれていて気持ち悪いという問題を回避できます。実装が複雑になってしまいますが、引数の数を見て以前のような記述でも動くようにはできる気がします。

select :key, label: "選んでください" do
  option :left, label: "左" 
  option :right, label: "右" 
end

# inputなど、他のウィジェットもすべてoptionalな名前付き引数に対応させる
input :free_text, label: "あ" 

新しいメソッドを定義する

optionメソッドの引数の順序を入れ替えた新しいメソッドを定義し、今後はそちらを利用することにします。

シンプルな実装で引数の順序を入れ替えられますが、selectとoptionというのはHTMLをオマージュしてこのような名前になっているため、option以外の良い名前がないという問題があります。

あひる 家鴨 さんがほぼ7年前に更新

提案ありがとうございます。
二つの提案を比べてみるとキーワード引数の方がよさそうです。

キーワード引数を利用

しっくりきました。
インデックスずれについては盲点でしたが、この実装によって回避できるのはいいですね。
大まかな実装の手段としてはこちらで一旦書いてみようと思います。
適当にどれかのウィジェットで仮実装して他に考慮すべき点があるか確認をして、なければウィジェット全体に適用して見たいと思います。

新しいメソッドを定義する

optionはそれ以上にいい名前がなさそう、かつ今の名前がフィットしているので、できるなら今の名前を引き継ぎたいです。

他の形式にエクスポート: Atom PDF