私のボタンはどこですか?

「私のボタンはどこですか? なぜ非アクティブなのですか?」プログラマーは、製品のユーザーからこれらの言葉をどれくらい頻繁に聞くことができますか? ほとんどの場合、非常に頻繁に、考えるために、または多分製品自体がユーザーのこの質問に答えるべきです。



通常の非アクティブなボタンは次のように表示されますが、何らかの理由で現在ユーザーが使用できません。



非アクティブなサイレントボタン

これはサイレントであり、インタラクティブではなく、この状態にある理由やアクティブになる条件についてのわずかな情報をユーザーに提供しません。 そして、ここに、「高貴な」より有益な非アクティブなボタンがどのように見えるかを示します。



非アクティブなボタン



塩とは何ですか? しかし、Pythonプログラミング言語でルールを記述して、これらのルールがボタンのアクティビティステータスを同時に計算し、ボタンを非アクティブ化する必要がある場合の理由に関するレポートを提供する方法については、この記事で説明します。



自作ライブラリを使用して、Pythonプログラミング言語で次のルールを記述できます。



from rules import _and_, _or_ # The rule def can_user_add_comment(user, topic): return _and_( lambda: (user, “  ”), lambda: (user.is_status_active(), “   ”), lambda: _or_( lambda: (user.is_in_admin_group(), “  ”), lambda: _and_( lambda: (topic.is_status_open(), “ ”), lambda: (user.has_enough_karma_to_add_comment(), “      ”), lambda: (user.is_below_comments_per_minute_quota(), “   ,     ”), ), ), )
      
      





論理演算クラスは、必要に応じて値を計算するために呼び出されるlambda



にラップされたオペランドを受け入れます。 つまり 計算は「短縮スキーム」に従って実行されます。たとえば、 _and_



は、最初のFalse



前に引数の値を計算し、 _or_



最初のTrue



前に計算します。 各オペランドは、実際にテストされた値(タプルの最初の要素)とメッセージ(タプルの2番目の要素)で構成され、テストされた値の値がFalse



場合に使用されます。 また、必要に応じて、ユーザーへの通知の観点から、ルールの無関係な部分(オペランド)のメッセージを省略できます。



次に、たとえばMakoテンプレートで次のようにこのルールを使用します。



 <% user = get_authenticated_user() granted = can_user_add_comment(user, current_topic) %> <input type=”button” value=” ” title=”${” ” if granted else unicode(granted)}” ${“disabled” if not granted else “”} />
      
      





例からわかるように、ブールコンテキストでcan_user_add_comment()



関数を呼び出して取得したgranted



オブジェクトは、ボタンのアクティビティのステータスを報告し、ストリングコンテキストでは、ブールコンテキストでFalse



を返した場合に理由を報告します。 ボタンが非アクティブである理由はそのtitle



記録され、マウスでボタンの上にカーソルを置くとユーザーによって取得されます。 デフォルトでは、特定のメッセージのみがレポートに到達し、ルールの計算結果はFalse



であることが判明しました。 しかし、ルール全体の論理ブランチがFalse



返した完全なツリーのようなレポートを生成することもできます。 これを行うには、 granted.build_report()



またはgranted.build_html_report()



呼び出しgranted.build_report()







_and_



_not_



_not_



_or_



_not_



_not_



_or_



、および_true_



操作は、ライブラリアーセナルで使用できます。



ネットワーク検索の結果、類似するものが見つからなかったため、独自のライブラリを作成する必要がありました。 最初のバージョンは最近リリースされました。 この小さな、しかしときどきかなり関連性のあるタスクを解決する際のあなたの経験について学ぶことは、私にとって非常に興味深いでしょう。



All Articles