type leaf[T any] struct {
val
left, right *leaf[T]
}
در ساختار `leaf[T any] struct` ، فیلد `val` تایپ نداره به دلیل استفاده از آرگومان تایپی (type parameter) به نام `T` در تعریف ساختار.
توی Go 1.18 به بعد، تایپهای پارامتریک اجازه میدن تا کدها با توجه به انواع مختلف مقادیر، تولید بشن
این یک نوع پارامتریک (Parametric Polymorphism) توی Go هستش. با استفاده از `any` در تعریف تایپ `leaf[T any]`، اجازه میده که تایپ `T` هر نوع دلخواهی باشن. این امکان داده میشه تا تایپ `leaf` وا با مقادیر از انواع مختلف ایجاد بشه، به عنوان مثال میتونین `leaf[int]`، `leaf[string]`، و غیره ایجاد کنید.
توی تعریف `leaf[T any] struct`، `T` یک پارامتر تایپی هستش که مشخص میکنه که مقدار `val` چه نوعی هست. در نتیجه، `T` میتونه هر نوعی باشه که به عنوان آرگومان به تعریف ساختار `leaf` ارسال بشه. به همین دلیل، تایپ `leaf` میتونه برای مقادیر مختلف از انواع مختلف استفاده بشه.
این روش به برنامهنویس امکان انعطاف بیشتر در استفاده از تایپها را میده و کد قابل استفاده مجددتری فراهم میکند. این یکی از ویژگیهای قدرتمند Go به عنوان یک زبان برنامهنویسی اجازهبخش (Permissive Programming) هستش.
موفق باشید ?
Reza Mobaraki۲۹ تیر ۱۴۰۲، ۱۰:۱۳
سلام
توضیحات شمارو متوجهم.
گفتید: در ساختار `leaf[T any] struct` ، فیلد `val` تایپ نداره به دلیل استفاده از آرگومان تایپی (type parameter) به نام `T` در تعریف ساختار.
من هم این موضوع رو قبول دارم ولی سوال من این بود که این موضوع نباید در داخل بلاکِ جنریک استراکت هم درج میشد؟
یعنی به این شکل:
type leaf[T any] struct {
val T
left, right *leaf[T]
}
محمد حیدری۳۱ تیر ۱۴۰۲، ۱۳:۲۲
در واقع فکرمیکنم همین که مورد دوم رو من توی ویدیو دیدم! و همین رو بررسی کردم :) ولی به نظرم استاد اون قسمت رو شبه کد نشون دادن ( چون خودشون کدشو نزده بودن و یک تصویر بودش)