2 ms·
A great typing system is generally a good thing if many people work on the same large project. I love how nim typings gets out of your way but are flexible enou
by runekaagaard 3y ago
A great typing system is generally a good thing if many people work on the same large project. I love how nim typings gets out of your way but are flexible enough to not tie you down.
That being said - by Rich Hickey - typing also add a lot of complexity and non-optimal bindings between stuff. Untyped incremental development with just simple scalar types, and a single list, map and set type is wonderful. Large refactorings, not so much.
Adding gradual typing to a project often gives you the worst of the two worlds. You still fear changing stuff, _and_ have lots of overhead doing all the typing. Either your project is fully type checked at compile time or it isn't.
Python match statements are useful for checking structure and de-duplicating the container name:
result = {}
for temperature in temperatures:
match temperature:
case {"city": city, "temp": temp}:
if temp >= max_temp:
result[city] = temp
Oh, and python typing has come a long way:
from typing import List, TypedDict, Dict
class Temperature(TypedDict):
city: str
temp: int
def filter_temperatures(temperatures: List[Temperature], min_temp: int) -> Dict[str, int]:
result = {}
for temperature in temperatures:
match temperature:
case {"city": city, "temp": temp}:
if temp >= min_temp: # Most of the time >= is what people mean.
result[city] = temp
case _:
raise ValueError(f"Wrong temperature format: {temperature}")
return result
my_temperatures: List[Temperature] = [
{"city": "City1", "temp": 19},
{"city": "City2", "temp": 22},
{"city": "City3", "temp": 21},
]
print(filter_temperatures(my_temperatures, 20))
print(filter_temperatures([{"typecheck error": "and runtimeerror"}], 20))