Type Hinting یا نشانهگذاری نوع (Type Annotation) یکی از قابلیتهای پایتون است که به توسعهدهندگان کمک میکند کد خواناتر، قابل نگهداریتر و کمخطاتر بنویسند. در این راهنما، ابتدا به مفهوم تایپینگ در زبانهای برنامهنویسی میپردازیم، سپس تفاوت تایپ استاتیک و داینامیک را بررسی میکنیم و در نهایت Type Hinting را در پایتون با مثالهای کاربردی توضیح میدهیم.
در زبانهای برنامهنویسی، تایپینگ به مفهوم تعیین نوع دادهای که یک متغیر میتواند ذخیره کند اشاره دارد. انواع دادهای شامل اعداد، رشتهها، لیستها، دیکشنریها، و انواع سفارشی میشوند.
مثال:
x = 10 # عدد صحیح (int) y = "hello" # رشته (str) z = [1, 2, 3] # لیست (list)
زبانهای برنامهنویسی از دو روش برای مدیریت تایپها استفاده میکنند: تایپ استاتیک (Static Typing) و تایپ داینامیک (Dynamic Typing).
مثال در پایتون:
def add(a, b): return a + b print(add(5, 3)) # خروجی: 8 (int) print(add("5", "3")) # خروجی: "53" (str) → بهجای جمع، اتصال رشتهای انجام شد!
در این مثال، add هم روی اعداد و هم روی رشتهها کار میکند، اما ممکن است این رفتار در جایی که انتظار عدد داشتیم مشکل ایجاد کند.
مثال در جاوا:
int x = 10; String y = "Hello"
اگر سعی کنیم مقدار "Hello" را به متغیر x اختصاص دهیم، کامپایلر خطا میدهد.
در پایتون 3.5 به بعد، امکان استفاده از Type Hinting اضافه شد که به ما اجازه میدهد هنگام تعریف متغیرها و توابع، نوع داده را مشخص کنیم، اما پایتون همچنان یک زبان داینامیک تایپ باقی میماند.
مثال بدون Type Hinting:
def greet(name): return "Hello, " + name
مشکل اینجاست که name میتواند عدد یا هر نوع دیگری باشد که باعث خطاهای احتمالی در اجرا میشود.
همین مثال با Type Hinting:
def greet(name: str) -> str: return "Hello, " + name
name: str مشخص میکند که name باید یک رشته (str) باشد.> str نشان میدهد که مقدار بازگشتی تابع یک رشته خواهد بود.اگر ورودیای غیر از str بدهیم، ابزارهای استاتیک چککنندهی تایپ (مثل mypy) میتوانند ما را از این مشکل آگاه کنند.
mypy خطاها را قبل از اجرا شناسایی میکنند.name: str = "Alice" age: int = 25 height: float = 1.75 is_student: bool = False
def add(x: int, y: int) -> int: return x + y
x: int و y: int نشان میدهد که آرگومانها باید عدد صحیح باشند.> int نشان میدهد که مقدار بازگشتی یک عدد صحیح است.list و dictfrom typing import List, Dict numbers: List[int] = [1, 2, 3, 4] student: Dict[str, int] = {"Alice": 20, "Bob": 22}
Optional)from typing import Optional def get_age(name: str) -> Optional[int]: if name == "Alice": return 25 return None # مقدار None مجاز است
Union (چندین نوع مجاز)from typing import Union def process(value: Union[int, str]) -> str: return str(value) + " processed"
اینجا value میتواند هم عدد و هم رشته باشد.
mypymypy یک ابزار برای بررسی تایپ استاتیک در پایتون است. برای نصب:
pip install mypy
برای بررسی کد:
mypy script.py
اگر تایپها اشتباه باشند، mypy خطاها را نمایش میدهد.