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)