DEV Community

Cover image for Cleaner logic: triggon vs if-statements
tsuruko
tsuruko

Posted on • Edited on

Cleaner logic: triggon vs if-statements

I compared code using my library triggon with traditional if statements!

First Example 👇

This shows a situation where you want to change a message depending on the arguments.

Traditional if version:

def sample(y: int): x = 7 if x > y: fmt = "greater than" elif x == y: fmt = "equal to" else: fmt = "smaller than" print(f"x is {fmt} y.") sample(10) # Output: x is smaller than y. sample(7) # Output: x is equal to y. sample(0) # Output: x is greater than y. 
Enter fullscreen mode Exit fullscreen mode

With triggon:

tg = Triggon({"A": "greater than", "B": "equal to"}) 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="smaller than") print(f"x is {fmt} y.") sample(10) # Output: x is smaller than y. sample(7) # Output: x is equal to y. sample(0) # Output: x is greater than y. 
Enter fullscreen mode Exit fullscreen mode

The only change is one line,
but it removes three lines inside the function!

Second Example 👇

This shows a situation where you want to delete user data and later recover it.

Traditional if version:

# (This `if` version was auto-written by AI)  @dataclass class User: name: str = "John" 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: # Save original values if not already saved  self._original_name = self.name self._original_age = self.age self.name = None self.age = None elif not delete and not self._reverted: # Do nothing if restore not requested yet  pass elif delete and self._reverted: # Skip change if values have been reverted  pass def revert(self): if self._original_name is not None and self._original_age is not None: 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}") # Output: user name: John, age: 25  user.apply_deletion(True) print(f"user name: {user.name}, age: {user.age}") # Output: user name: None, age: None  user.revert() print(f"user name: {user.name}, age: {user.age}") # Output: user name: John, age: 25  user.apply_deletion(True) print(f"user name: {user.name}, age: {user.age}") # Output: user name: John, age: 25 
Enter fullscreen mode Exit fullscreen mode

That’s a bit too long…

With triggon:

tg = Triggon("del", None) @dataclass class User: name: str = "John" 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}") # Output: user name: John, age: 25  user.apply_deletion(True) print(f"user name: {user.name}, age: {user.age}") # Output: user name: None, age: None  # Permanently revert the values tg.revert("del", disable=True) print(f"user name: {user.name}, age: {user.age}") # Output: user name: John, age: 25  user.apply_deletion(True) print(f"user name: {user.name}, age: {user.age}") # Output: user name: John, age: 25 
Enter fullscreen mode Exit fullscreen mode

It reduces the code to less than half compared to the if version!

if statements are fine for simple logic,
but for more complex cases—like storing original values, performing multiple toggles, or restoring state—triggon really shines!

I just released v0.1.0b3 of my library triggon today.
But some bugs have already been found...
I'll be fixing them in the next update soon!

↓ You can check out the README here:
README

🔗 GitHub -> tsuruko12/triggon
🔗 X -> @tool_tsuruko12

Top comments (0)