自作ライブラリ triggon
を使うことで、どのくらいコードが削減できるのか調べてみました!
↓ ライブラリの概要は前回記事で紹介しています
If文いらず!Pythonで値や処理を自動で切り替える軽量ライブラリ
以下の2つの例で比較してみました👇
➀ 引数によってテキストを変更する
if
文の場合
def sample(y: int):
x = 7
if x > y:
fmt = "より大きい"
elif x == y:
fmt = "と等しい"
else:
fmt = "より小さい"
print(f"x は y {fmt}")
sample(10) # x は y より小さい
sample(7) # x は y と等しい
sample(0) # x は y より大きい
triggon
を使った場合
tg = Triggon({"A": "より大きい", "B": "と等しい"})
def sample(y: int):
x = 7
tg.set_trigger("A", cond="x > y")
tg.set_trigger("B", cond="x == y")
fmt = tg.switch_lit(["A", "B"], org="より小さい")
print(f"x は y {fmt}")
sample(10) # x は y より小さい
sample(7) # x は y と等しい
sample(0) # x は y より大きい
コード量は2行しか変わりませんが、関数内のコード量では3行削減できています!
➁ ユーザー情報を削除・復元する
このサンプルコードはtriggon
を使って書いたコードをAIにif
文のみで書いてもらったものです!
if
文の場合 (AI作成)
# (この ifバージョンはAIが自動生成したものです)
@dataclass
class User:
name: str = "太郎"
age: int = 25
_original_name: str = None
_original_age: int = None
_reverted: bool = False # 元に戻したかどうかのフラグ
def apply_deletion(self, delete: bool):
if delete and not self._reverted:
# まだ元に戻していない場合、元の値を保存して削除
self._original_name = self.name
self._original_age = self.age
self.name = None
self.age = None
elif not delete and not self._reverted:
# 復元要求がない場合は何もしない
pass
elif delete and self._reverted:
# すでに復元済みならスキップ
pass
def revert(self):
if self._original_name is not None and self._original_age is not None:
# 元の値を復元し、revertedフラグを更新
self.name = self._original_name
self.age = self._original_age
self._reverted = True
user = User()
user.apply_deletion(False)
print(f"user name: {user.name}, age: {user.age}") # 出力: user name: 太郎, age: 25
user.apply_deletion(True)
print(f"user name: {user.name}, age: {user.age}") # 出力: user name: None, age: None
user.revert()
print(f"user name: {user.name}, age: {user.age}") # 出力: user name: 太郎, age: 25
user.apply_deletion(True)
print(f"user name: {user.name}, age: {user.age}") # 出力: user name: 太郎, age: 25
triggon
を使った場合
tg = Triggon("del", None)
@dataclass
class User:
name: str = "太郎"
age: int = 25
def apply_deletion(self, delete: bool):
tg.switch_var("del", [self.name, self.age])
tg.set_trigger("del", cond="delete")
user = User()
user.apply_deletion(False)
print(f"user name: {user.name}, age: {user.age}") # 出力: user name: 太郎, age: 25
user.apply_deletion(True)
print(f"user name: {user.name}, age: {user.age}") # 出力: user name: None, age: None
# 永続的に元の値に切り替える
tg.revert("del", disable=True)
print(f"user name: {user.name}, age: {user.age}") # 出力: user name: 太郎, age: 25
user.apply_deletion(True)
print(f"user name: {user.name}, age: {user.age}") # 出力: user name: 太郎, age: 25
コード量はほぼ半分削減されています!
シンプルな構造ではif
で十分ですが、元の値に戻したり、複数の値を同時に切り替える場面では、triggon
はとても役に立ちます!
そして、triggon
は最近v0.1.0b4
にアップデートされました!
不具合が多かった旧バージョンをご利用の方は、
ぜひ最新のバージョンにアップグレードしてください!
そして、次回のアップデートではトリガーをタイマーで制御できる機能を追加予定です。
↓ READMEはこちら
README
🔗 GitHub -> tsuruko12/triggon
🔗 X -> @12tsuruko