💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ محمد حیدری
سوال در مورد استراکت leaf
جامعه گولنگ ایجاد شده در ۲۵ تیر ۱۴۰۲

سلام، توی اسلاید دقیقه ۹:۴۰ چرا فیلد val، تایپ نداره؟

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]
}
محمد حیدری ۳۱ تیر ۱۴۰۲، ۱۳:۲۲

در واقع فکرمیکنم همین که مورد دوم رو من توی ویدیو دیدم! و همین رو بررسی کردم :) ولی به نظرم استاد اون قسمت رو شبه کد نشون دادن ( چون خودشون کدشو نزده بودن و یک تصویر بودش)

در واقع نوع اول فکر کنم خطای کامپایلر میگیرید


بهترین پاسخ
Reza Mobaraki ۳۱ تیر ۱۴۰۲، ۱۴:۳۷

سلام بچه ها

امیدوارم خوب باشین

دقیقه ۹:۴۰ تایپ هم دارهc05c-Screenshot from 2023-07-22 16-55-49 (2).png

حامد نعیمایی ۰۱ مرداد ۱۴۰۲، ۱۸:۱۶