Sintassi Base
I fondamenti del linguaggio Flux: pulito come Python, potente per il web
Filosofia: Flux usa una sintassi Python-like senza i fastidiosi
$, ; e -> di PHP. Codice pulito, leggibile e moderno.
Commenti
Flux supporta commenti su singola linea e multilinea:
# Questo è un commento su singola linea
"""
Questo è un commento
su più linee
"""
# Puoi anche usare i commenti inline
name = "Mario" # Nome dell'utente
Variabili e Costanti
In Flux non servono simboli speciali per dichiarare variabili:
# Variabili
name = "Luca"
age = 25
is_active = True
# Costanti (per convenzione in maiuscolo)
API_KEY = "abc123"
MAX_USERS = 100
# Assegnazione multipla
x, y, z = 1, 2, 3
# Swap di valori
a, b = b, a
Tipi di Dati
Numeri
# Interi
count = 42
hex_value = 0xFF # Esadecimale
binary = 0b1010 # Binario
# Float
price = 19.99
scientific = 1.5e-4 # Notazione scientifica
# Operazioni
result = 10 + 5 # 15
result = 10 - 5 # 5
result = 10 * 5 # 50
result = 10 / 5 # 2.0 (sempre float)
result = 10 // 3 # 3 (divisione intera)
result = 10 % 3 # 1 (modulo)
result = 2 ** 3 # 8 (potenza)
Stringhe
# Stringhe semplici
name = "Mario"
name = 'Mario' # Singoli o doppi apici
# Stringhe multilinea
description = """
Questa è una stringa
su più linee
"""
# F-strings (interpolazione)
greeting = f"Ciao {name}!"
calculation = f"2 + 2 = {2 + 2}"
# Escape characters
path = "C:\\Users\\Mario"
quote = "Disse \"Ciao!\""
# Metodi utili
text = " Flux Lang "
text.strip() # "Flux Lang"
text.lower() # " flux lang "
text.upper() # " FLUX LANG "
text.replace(" ", "") # "FluxLang"
"Hello".startswith("He") # True
Liste
# Creazione liste
numbers = [1, 2, 3, 4, 5]
mixed = [1, "due", 3.0, True]
empty = []
# Accesso elementi
first = numbers[0] # 1
last = numbers[-1] # 5
# Slicing
subset = numbers[1:3] # [2, 3]
copy = numbers[:] # Copia completa
# Operazioni
numbers.append(6) # Aggiungi alla fine
numbers.insert(0, 0) # Inserisci all'inizio
numbers.remove(3) # Rimuovi valore
popped = numbers.pop() # Rimuovi e ritorna ultimo
# List comprehension
squares = [x**2 for x in range(5)] # [0, 1, 4, 9, 16]
evens = [x for x in numbers if x % 2 == 0]
Dizionari
# Creazione dizionari
user = {
"name": "Mario",
"age": 30,
"email": "mario@example.com"
}
# Accesso
name = user["name"]
name = user.get("name", "Default") # Con default
# Modifica
user["age"] = 31
user["city"] = "Roma" # Aggiungi nuova chiave
# Metodi utili
keys = user.keys() # ["name", "age", "email", "city"]
values = user.values() # ["Mario", 31, "mario@example.com", "Roma"]
items = user.items() # Coppie chiave-valore
# Dict comprehension
squares = {x: x**2 for x in range(5)}
Booleani e None
# Booleani
is_active = True
is_deleted = False
# None (valore nullo)
result = None
# Valori "falsy"
# False, None, 0, "", [], {} sono considerati False
# Controllo None
if user is None:
print("Utente non trovato")
# Operatore coalescenza
name = username or "Guest" # Usa "Guest" se username è falsy
Strutture di Controllo
If/Elif/Else
# If semplice
if age >= 18:
print("Maggiorenne")
# If/else
if is_logged_in:
show_dashboard()
else:
redirect("/login")
# If/elif/else
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
else:
grade = "F"
# Operatore ternario
status = "active" if user.is_active else "inactive"
# Match (pattern matching) - Nuovo in Flux!
match status:
case "pending":
send_reminder()
case "active":
show_content()
case "suspended":
show_error()
case _:
log_unknown_status()
Cicli
# For loop
for i in range(5):
print(i) # 0, 1, 2, 3, 4
# Iterare su lista
users = ["Mario", "Luigi", "Peach"]
for user in users:
print(f"Ciao {user}")
# Con indice
for i, user in enumerate(users):
print(f"{i}: {user}")
# Iterare su dizionario
for key, value in user_data.items():
print(f"{key} = {value}")
# While loop
count = 0
while count < 5:
print(count)
count += 1
# Break e continue
for i in range(10):
if i == 3:
continue # Salta questa iterazione
if i == 7:
break # Esci dal ciclo
print(i)
Funzioni
# Funzione semplice
def greet(name):
return f"Ciao {name}!"
# Parametri default
def create_user(name, role="user"):
return User(name=name, role=role)
# Parametri keyword
def send_email(to, subject, body, cc=None, bcc=None):
# Invia email
pass
# Chiamata con keyword arguments
send_email(
to="user@example.com",
subject="Benvenuto",
body="Grazie per la registrazione"
)
# Multiple return
def get_coordinates():
return 10, 20
x, y = get_coordinates()
# Lambda (funzioni anonime)
square = lambda x: x ** 2
numbers.sort(key=lambda x: x.age)
Gestione Errori
# Try/except base
try:
result = 10 / 0
except ZeroDivisionError:
print("Impossibile dividere per zero")
# Except multipli
try:
user = User.find(id)
send_email(user.email)
except UserNotFound:
return error(404, "Utente non trovato")
except EmailError as e:
log_error(f"Errore email: {e}")
return error(500, "Errore invio email")
# Finally
try:
file = open("data.txt")
data = file.read()
except FileNotFoundError:
data = ""
finally:
file.close() # Sempre eseguito
# Raise (solleva eccezione)
if not user.is_admin:
raise PermissionError("Accesso negato")
Import e Moduli
# Import base
import datetime
import json
# Import specifico
from datetime import date, time
from app.models import User, Post
# Import con alias
import numpy as np
from app.services import EmailService as Email
# Import relativo
from .utils import format_date
from ..models import User
# Import wildcard (sconsigliato)
from math import *
Decoratori
I decoratori sono una feature potente per modificare il comportamento di funzioni:
# Decoratore semplice
@cache(minutes=5)
def get_expensive_data():
# Query costosa
return Database.complex_query()
# Decoratori multipli
@requires_auth
@validate_json
@rate_limit(requests=100, per="hour")
def api_endpoint(request):
return {"status": "ok"}
# Decoratori con parametri
@timeout(seconds=30)
def long_running_task():
# Operazione lunga
pass
Type Hints
Flux supporta type hints opzionali per maggiore chiarezza:
# Type hints base
def greet(name: str) -> str:
return f"Ciao {name}"
# Con tipi complessi
from typing import List, Dict, Optional
def process_users(users: List[User]) -> Dict[str, int]:
return {"total": len(users)}
# Optional (può essere None)
def find_user(id: int) -> Optional[User]:
return User.find(id)
# Union types
from typing import Union
def parse_value(value: Union[str, int]) -> int:
return int(value)
Context Managers
# With statement
with open("file.txt") as f:
content = f.read()
# File chiuso automaticamente
# Database transaction
with db.transaction():
user.save()
order.save()
# Commit automatico o rollback in caso di errore
# Custom context manager
with timing("operazione"):
# Codice da misurare
process_data()
Operatori Speciali
# Walrus operator (:=)
if (n := len(users)) > 10:
print(f"Troppi utenti: {n}")
# Unpacking
first, *rest = [1, 2, 3, 4] # first=1, rest=[2,3,4]
# Merge dizionari
defaults = {"color": "blue", "size": "M"}
custom = {"color": "red"}
final = {**defaults, **custom} # {"color": "red", "size": "M"}
# In/not in
if "admin" in user.roles:
show_admin_panel()
# Is/is not (identità)
if result is None:
handle_error()
🎉 Ottimo! Ora conosci la sintassi base di Flux.
Prossimo passo: impara a creare Routes per gestire le richieste HTTP.