۲۳ مهر ۱۴۰۳
در این قسمت با نوع داده slice آشنا میشیم , نحوه استفاده و همچنین دستورات مرتبط باهاش رو یاد بررسی میکنیم.
نوع دادهی اِسلایس (slice) یک انتزاع بر روی نوع دادهی آرایه (array) است بدین معنی که slice استفاده از آرایه پیاده سازی شده است. بنابراین قبل از آشنایی با slice باید یک آشنایی اولیه با آرایه ها داشته باشیم.
برای تعریف یک آرایه کافیست طول و نوع آیتم های آرایه را مشخص کنیم:
مقادیر درون آرایه به صورت متوالی درون حافظه رم قرار میگیرند.
به چند دلیل آرایه ها به صورت متداول مورد استفاده قرار نمیگیرند:
[4]int را نمیتوان به متغیری که نوع آن [5]int نسبت داد. (تایپ های [4]int و [5]int  متمایز و ناسازگار هستند!)بر خلاف آرایه ها, برای تعریف اسلایس نیاز به مشخص کردن طول آن نداریم! برای تعریف اسلایس (slice decleration) از یک جفت کروشه [ ] به همراه دیتا تایپ مورد نظر استفاده میکنیم:
در هنگام تعریف اسلایس همانند آرایه عمل میکنیم با این تفاوت که درون جفت کروشه [ ] را خالی میگذاریم.
در Go, هر نوع دادهای یک مقدار پیشفرض به نام zero value (مقدار صفر) دارد که وقتی متغیری بدون مقداردهی اولیه تعریف میشود، به آن اختصاص داده میشود. این ویژگی باعث میشود که متغیرها در گولنگ همیشه مقدار معتبری داشته باشند و از خطاهای مرتبط با مقداردهی اولیه جلوگیری شود. مقدار صفر یک اسلایس (zero value) برابر با nil است. با استفاده از دستور make میتوان به اسلایس حافظه تخصیص داد.
نکته: برخلاف slice ها, آرایهها نیازی به مقداردهی اولیه صریح ندارند؛ مقدارِ صفرِ یک آرایه، یک آرایه آماده برای استفاده است که آیتمهای آن خودشان دارای مقدارِ صفر هستند!
روش دیگر برای ایجاد اسلایس استفاده از := و تابع make است:
در صورتی که پیش از ایجاد اسلایس, مقادیری که قرار است درون اسلایس قرار بگیرند را میدانید, می توانید از لیترال اسلایس (slice literal) استفاده کنید:
پس تا اینجا یاد گرفتیم ۳ روش برای ایجاد یک اسلایس وجود دارد:
make:= و دستور makeاسلایس یک دیتا استراکچر است که از سه بخش تشکیل شده است
هنگامی که یک اسلایس را تعریف میکنیم (declare) مقدار صفر آرایه (zero value) برابر با nil است. این بدین معناست که اشاره گر در این اسلایس به چیزی اشاره نمیکند و مقادیر len و cap برابر با صفر هستند.
 هنگامی که از تابع make استفاده میکنیم, این تابع ابتدا یک اسلایس ایجاد میکند, سپس یک آرایه با اندازه (cap) داده شده ایجاد میکند و اشاره گر اسلایس را طوری تنظیم میکند که به اولین عنصر آن آرایه اشاره کند, سپس مقادیر len و cap را تنظیم میکند و در اخر اسلایس ایجاد شده را به عنوان نتیجه برمیگرداند
تابع make سه پارامتر به عنوان ورودی قبول میکند. دو پارامتر اول اجباری و پارامتر سوم آپشنال (دلخواه یا optional) است. پارامتر اول نمایانگر نوع دیتا, پارامتر دوم len و پارامتر سوم cap را مشخص میکند.
طول و ظرفیت یک اسلایس را به ترتیب با توابع len و cap میتوان تشخیص داد:
اگر طول (len) اسلایس برابر با ۵ باشد یعنی به اندیس های ۰ تا ۴ دسترسی خواهیم داشت (از ۰ تا ۴ در مجموع ۵ مقدار قرار خواهد گرفت):
در صورتی که بخواهیم عناصر خارج از محدوده len را بخوانیم یا مقدار دهی کنیم, با خطا روبرو خواهیم شد:
برای افزودن یک یا چند مقدار به انتهای اسلایس میتوان از تابع append استفاده کرد.
تابع append مقادیر داده شده را به اِنتهای آرایه اضافه کرده و طول آرایه را به اندازه تعدادِ مقادیر افزایش میدهد. در صورتی که طول اسلایس (len) بزرگتر از ظرفیت (cap) آن شود, آرایه ای که اشاره گرِ اسلایس به آن اشاره میکند ظرفیت ذخیره کردن مقادیر جدید را نخواهد داشت و تابع append در این مواقع به صورت زیر عمل میکند:
برای کپی کردن مقادیر از یک اسلایس به اسلایس دیگر میتوان از تابع copy استفاده کرد.
تابع copy به اندازه طول پارامتر اول, مقادیر را از پارامتر دوم به درون پارامتر اول کپی میکند و یک عدد که برابر با تعداد آیتمِ کپی شده است را برمیگرداند.
شما میتوانید یک آرایه یا اسلایس را دوباره به قسمت های کوچکتر اسلایس کنید, برای اینکار میتوانید از دستور [start:end] استفاده کنید. اسلایس ایجاد شده شامل تمامی آیتم ها از ایندکس start تا end خواهد بود اما خود end را شامل نمی شود.
با اسلایس کردن یک آرایه یا اسلایس, پوینترِ اسلایسِ جدید به آرایه قبلی یا جایی که پونترِ اسلایس اصلی اشاره میکند اشاره خواهد کرد. بدین ترتیب اگر مقداری را در اسلایسِ جدید ایجاد شده تغییر دهیم در متغیر اصلی هم تغییر خواهد کرد.
میتوان اندیس شروع و پایان را مشخص نکرد. در این صورت اندیس شروع برابر با 0 و اندیس پایان برابر با طول آرایه یا اسلایس اصلی در نظر گرفته میشود.
محتوای این پست با توجه به slices-intro از سایت رسمی گولنگ نوشته شده است.
قسمت قبلی: نوع داده متنی (string) | گولنگ به زبان ساده
قسمت بعدی: حلقه ها | گولنگ به زبان ساده