ΠΠ²ΠΈΠ΄ΠΎ Π²Π°Π½ Π ΠΎΡΡΡΠΌ (Guido van Rossum)
ΠΠΎΠ²Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ «match», ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ Π² ΡΠ·ΡΠΊΠ°Ρ
Scala, Rust ΠΈ F#, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΎΠ±ΡΠ°Π·ΡΠΎΠ², ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ
Π² Π±Π»ΠΎΠΊΠ°Ρ
Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° «case». Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° «switch», Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ³ΠΎ Π² ΡΠ·ΡΠΊΠ°Ρ
Π‘ΠΈ, Java ΠΈ JavaScript, Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ «match» ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅
def http_error(status):
match status:
case 400:
return «Bad request»
case 401|403|404:
return «Not allowed»
case 418:
return «I’m a teapot»
case _:
return «Something else»
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ, ΡΠΏΠΈΡΠΊΠΎΠ² ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ Π΄Π»Ρ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΡΠ°Π±Π»ΠΎΠ½Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ «if», ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡΠΎΠΊ («[x, y, *rest]»), ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° ΡΠ²ΡΠ·ΠΎΠΊ ΠΊΠ»ΡΡ/Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, {«bandwidth»: b, «latency»: l} Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ «bandwidth» ΠΈ «latency» ΠΈ ΡΠ»ΠΎΠ²Π°ΡΡ), ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² (ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ «:=»), ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ Π² ΡΠ°Π±Π»ΠΎΠ½Π΅. Π ΠΊΠ»Π°ΡΡΠ°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΏΡΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° «__match__()».
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
def whereis(point):
match point:
case Point(0, 0):
print(«Origin»)
case Point(0, y):
print(f»Y={y}»)
case Point(x, 0):
print(f»X={x}»)
case Point():
print(«Somewhere else»)
case _:
print(«Not a point»)
match point:
case Point(x, y) if x == y:
print(f»Y=X at {x}»)
case Point(x, y):
print(f»Not on the diagonal»)
RED, GREEN, BLUE = 0, 1, 2
match color:
case .RED:
print(«I see red!»)
case .GREEN:
print(«Grass is green»)
case .BLU
E:
print(«I’m feeling the blues :(«)
ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½Π·ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½ Π½Π°Π±ΠΎΡ
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru