آموزش برنامه نویسی سوئیفت (Swift): متغیر، ثابت و انواع داده – بخش اول

۴۸۶ بازدید
آخرین به‌روزرسانی: ۱۸ شهریور ۱۴۰۲
زمان مطالعه: ۱۰ دقیقه
آموزش برنامه نویسی سوئیفت (Swift): متغیر، ثابت و انواع داده  – بخش اول

راهنماهای زیادی برای یادگیری سوئیفت عرضه شده‌اند. شرکت اپل منابع خوبی برای یادگیری سوئیفت عرضه کرده است که شامل دوره‌های آموزشی ویدئویی و موارد دیگر می‌شود. همچنین دوره‌های آموزشی مختلف زیادی از سوی افراد متفاوت عرضه شده‌اند؛ اما ما در مجله فرادرس قصد داریم زبان برنامه‌نویسی سوئیفت را در طی یک سلسله مطالب پیوسته به طور کامل بررسی کنیم. بنابراین در ادامه این مقاله که اولین نوشته از این دوره محسوب می‌شود با ما همراه باشید.

Swift Programming

تفاوت این دوره آموزشی زبان برنامه‌نویسی سوئیفت چیست؟

همان طور که گفتیم راهنماهای زیادی وجود دارند که روش انجام کارها را به شما نشان می‌دهند؛ اما مواردی که دلیل چرایی انجام کاری به روش خاص را توضیح دهند، بسیار اندک هستند. هدف ما در این سلسله مطالب آموزشی آن است که چرایی روش‌های برنامه‌نویسی معرفی شده را به بهترین نحو ممکن برای شما بیان کنیم.

راهنماهای زیادی وجود دارند که همه مفاهیم را به یکباره مطرح می‌کنند؛ اما ما قصد داریم وارد جزییات این حوزه بشویم. شما در طی این دوره با سرعت کمتری یاد می‌گیرید؛ اما زمانی که همه چیز را آموختید، خواهید توانست با مواردی که آموخته‌اید، کارهایی به مراتب عمیق‌تر از آن چه در راهنماهای دیگر می‌آموزید انجام دهید.

این دوره آموزشی چه مواردی را شامل می‌شود؟

در این راهنما مقدمات برنامه‌نویسی در سوئیفت آموزش داده می‌شود. بسیاری از مواردی که آموزش داده می‌شوند در مورد زبان‌های دیگر برنامه‌نویسی نیز کاربرد دارند؛ اما همه کدها به زبان سوئیفت نوشته شده‌اند و از این رو مسیر یادگیری شما در یک زبان برنامه‌نویسی دیگر ممکن است متفاوت باشد.

با این که این راهنما برای آموزش چگونگی ساخت نخستین اپلیکیشن طراحی شده است؛ اما موارد مقدماتی ضروری را به شما آموزش می‌دهد که می‌توانید از آن‌ها در اپلیکیشن‌های مختلف استفاده کنید.

این دوره آموزشی چه مواردی را شامل نمی‌شود؟

در این راهنما شیوه استفاده از Xcode یا چگونگی ایجاد نخستین اپلیکیشن موبایل آموزش داده نمی‌شود. ما در این راهنما روش ساخت رابط‌های کاربری، استفاده از طرح‌بندی خودکار (auto-layout)، روش استفاده از فریمورک‌های مختلف یا کاربرد انواع فایل مختلف در iOS را آموزش نخواهیم داد.

شاید در آینده یک سری مطالب آموزشی در مورد این موضوعات نیز ارائه کنیم؛ اما فعلاً هدف ما صرفاً آموزش زبان سوئیفت و موارد مرتبط با این زبان است.

هدف این سری مطالب آموزشی

هدف این سری مطالب آموزشی این نیست که به سرعت به برنامه‌نویسی تبدیل شوید که هیچ چیز نمی‌دانید؛ بلکه ما می‌خواهیم برنامه نویسان تازه‌کار با معنی واقعی برنامه‌نویسی آشنا شوند. هدف عمده این است که درک بهتری از برنامه‌نویسی به طور کلی در خواننده ایجاد شود. بدین ترتیب برنامه نویسان درک بهتری از مفاهیم برنامه‌نویسی می‌یابند که در مصاحبه‌های شغلی و در سراسر زندگی حرفه‌ای برایشان مفید خواهد بود.

در این سری راهنما فرض ما این است که شما با موارد زیر آشنا هستید:

  • رایانه چیست؟
  • برنامه به چه چیزی گفته می‌شود؟
  • درک کافی دارید که بدانید 2 + 2 چند می‌شود.
  • درک کافی دارید که بتوانید پاکت شیر را در یخچال تشخیص دهید.

اگر یک سیستم Mac داشته باشید می‌توانید نرم‌افزار Xcode را از اپ‌استور مک دانلود کنید و در ادامه مطالعه یک زمینه عملی نیز برای تجربه و تمرین پیدا کنید.

اگر از ویندوز استفاده می‌کنید می‌توانید از وب‌سایت repl برای کدنویسی به زبان سوئیفت استفاده کنید. دقت کنید که در زمان نگارش این راهنما repl تنها از نسخه 3 سوئیفت پشتیبانی می‌کند.

اگر از لینوکس استفاده می‌کنید، می‌توانید سوئیفت را برای اوبونتو از وب‌سایت Swift.org دانلود کنید و هم اینک نسخه‌های 14.04 و 16.04 از اوبونتو پشتیبانی می‌شوند. مسیری که برای نصب Xcode می‌پیمایید، متفاوت خواهد بود و می‌توانید با اندکی تلاش آن را روی توزیع‌های مبتنی بر دبیان نیز اجرا کنید.

مقدمه

رایانه شما مکانی برای نگهداری چیزهایی که در برنامه استفاده می‌شوند دارد که حافظه نامیده می‌شود. در واقع نام دقیق آن «حافظه با دسترسی تصادفی» (Random Access Memory) است که به اختصار RAM نامیده می‌شود. حافظه با دسترسی تصادفی به صورت بلوک‌هایی طراحی شده است که آن‌ها را می‌توان مانند آجرهای لِگو تصور کرد و هر بلوک می‌تواند داده‌های زیادی در خود ذخیره کند. داده‌ها به صورت بیت یا بایت ذخیره می‌شوند.

  • 8 بیت = 1 بایت
  • 1024 بایت = 1 کیلوبایت (KB)
  • 1024 کیلوبایت = 1 مگابایت (MB)
  • 1024 مگابایت = 1 گیگابایت (GB)

شاید اگر از قبل با این مفاهیم آشنا نباشید، در صورت مشاهده همه این‌ها دچار سرگیجه شوید؛ اما اگر می‌خواهید با روش نوشتن برنامه‌ها آشنا شوید، باید این موارد را بیاموزید. کمی بعدتر وقتی در مورد انواع داده صحبت خواهیم کرد، دوباره به این موضوع باز می‌گردیم؛ اما فعلاً می‌خواهیم موضوعات دیگری را مورد بررسی قرار دهیم.

متغیرها

متغیر به بیان ساده، محلی برای ذخیره‌سازی داده‌هایی است که قابل تغییر هستند.

متغیرها در سوئیفت با استفاده از کلیدواژه var اعلان می‌شوند. پس از این کلیدواژه یک حرف، کلمه یا عبارت می‌آوریم که ارتباط معنایی با متغیر ما داشته باشد و به عنوان نام آن در نظر گرفته می‌شوند. در ادامه متغیرها با استفاده از یک علامت تساوی (=) و سپس با تعیین یک مقدار برای متغیر، از آن وهله‌ای (instance) ساخته می‌شود.

1var a = 1
2var name = "Bob"
3var physicsRoomNumber = "123 B"

رایانه در پشت صحنه هنگام ایجاد یک متغیر برخی موارد را می‌داند. رایانه ابتدا به var a نگاه می‌کند و به خود می‌گوید «ما اینک به مقداری حافظه نیاز داریم و باید آن را از RAM تقاضا کنیم، بگذار بینیم به چه مقدار حافظه نیاز داریم». سپس رایانه به = 1 نگاه می‌کند و باز به خود می‌گوید «خب ما باید از RAM بخواهیم فضای حافظه مورد نیاز برای نگهداری مقدار 1 را به ما بدهد». بدین ترتیب رایانه آن مقدار حافظه را از RAM تقاضا می‌کند و در صورتی که RAM مشکلی با این مسئله نداشته باشد، این فضا را به برنامه ما اختصاص می‌دهد.

هنگامی که name با مقدار Bob وهله‌سازی می‌شود و یا هنگامی که مقدار 123 B برای physicsRoomNumber تعیین می‌شود همین روند تکرار می‌شوند. اگر بخواهید مقدار یک متغیر را تغییر دهید، فرایند کار ساده خواهد بود:

1var a = 1
2a = 253

می‌بینید که از کلیدواژه var در خط اول استفاده کرده‌ایم؛ اما در خط دوم از آن استفاده نکرده‌ایم. دلیل این مسئله آن است که var تنها برای اعلان کردن متغیرها استفاده می‌شود. به بیان دیگر ما با استفاده از var به کامپایلر اعلام می‌کنیم که به ایجاد یک متغیر در این جا نیاز داریم. منظور از کامپایلر، برنامه‌ای است که برنامه ما را از حالت قابل خواندن برای انسان به چیزی تبدیل می‌کند که رایانه می‌تواند درک کند و آن را کد ماشین می‌نامیم. زمانی که متغیر ایجاد شد، دیگر لازم نیست که دوباره آن را ایجاد کنیم و از این رو صرفاً با استفاده از نام آن (a) می‌توانیم به آن ارجاع کنیم و هر مقداری که لازم است را به آن انتساب دهیم.

Constants

ثابت‌ها

ثابت مقداری است که نمی‌تواند تغییر یابد. شاد از خود بپرسید، اصولاً ما چرا باید چیزی را ذخیره کنیم که نمی‌توانیم آن را تغییر دهیم. اغلب چیزهایی که در زندگی روزمره با آن‌ها سر و کار داریم تغییر می‌یابند. خود ما پیرتر می‌شویم، از یک مکان به مکان دیگر می‌رویم و حتی برنامه‌ها نیز برای کار کردن به تغییر نیاز دارند. از این رو چرا باید بخواهیم یک مقدار غیر قابل تغییر یا ثابت داشته باشیم؟

در زندگی روزمره ثابت‌ها برای اسامی، مکان‌ها، چیزها، تاریخ تولد، تاریخ ازدواج، تاریخ مرگ و موارد دیگر استفاده می‌شوند.

در سوئیفت ثابت‌ها با استفاده از کلیدواژه let اعلان می‌شوند. در واقع ثابت‌ها به همان ترتیب متغیرها وهله‌سازی می‌شوند. تنها تفاوت در این است که اگر متعاقباً بخواهید یک ثابت را تغییر دهید، کامپایلر اجازه چنین کاری را به شما نخواهد داد. این کار از طریق نمایش پیام‌های خطا روی صفحه نمایش و اعلام عدم امکان تغییر صورت می‌گیرد. در ادامه روش ایجاد ثابت‌ها را ملاحظه می‌کنید:

1let stopSignText = "STOP"
2let myFirstName = "Bob"
3let appleCompanyName = "Apple Inc."

البته باید توجه داشته باشید که گرچه روش ایجاد ثابت‌ها و متغیرها از بیرون بسیار متفاوت دیده می‌شود، اما فرایندی که درون رایانه در هر مورد رخ می‌دهد تا حدود زیادی مشابه است. در ادامه این سلسله آموزش‌ها در مورد کاربرد ثابت‌ها و چگونگی استفاده همزمان از ثابت‌ها متغیرها بیشتر خواهیم آموخت.

Types

انواع داده

در آخرین بخش از این مقاله به بررسی مفهوم نوع داده در سوئیفت می‌پردازیم. انواع مختلفی از مقادیر وجود دارند که می‌توان در متغیرها و ثابت‌ها ذخیره کرد. در ادامه تنها برخی از این نوع داده‌ها را معرفی می‌کنیم و انواع پیشرفته‌تر را در بخش‌های بعدی این سلسله آموزش‌ها ارائه خواهیم کرد.

رشته (String )

یک نوع داده رشته‌ای می‌تواند شامل هر تعدادی از کاراکترها باشد. مهم نیست که یک رشته شامل تنها یک حرف مانند a یا رشته‌ای به طول کل این مقاله باشد و یا این که در آن اعداد مختلف مانند «یک، دو، سه و ...» را نوشته باشیم. در هر صورت همه این‌ها را می‌توان در یک نوع داده String ذخیره کرد. برای این که یک مقدار به صورت رشته تشخیص داده شود باید آن را درون گیومه (“”) قرار داد. برای نمونه:

1let myName = "Bob"
2var rain = "falls down"

هر کاراکتر در یک رشته چه یک فاصله خالی (space) و چه حرف واقعی باشد، 2 بایت فضا اشغال می‌کند. دانستن این نکته در ادامه اهمیت زیادی برای شما خواهد داشت؛ اما فعلاً کافی است بدانید که کامپایلر همه این کارها را مدیریت می‌کند.

عدد صحیح (Int)

Int اختصاری برای عبارت عدد صحیح (Integer) است. عدد صحیح می‌تواند هر عدد کاملِ منفی یا مثبت در محدوده بین 2,147,483,648- و 2,147,483,647 در برنامه‌های 32 بیتی و در محدوده بین 9,223,372,036,854,775,808- و 9,223,372,036,854,775,807 در برنامه‌های 64 بیتی قرار داشته باشد.

اگر اهل بازی‌های رایانه‌ای باشید می‌دانید که عدد 2 میلیارد بیشترین امتیازی است که هنگام استفاده از کد تقلب می‌توان به دست آورد. در زبان برنامه‌نویسی سوئیفت Int می‌تواند از بازه وسیع‌تری انتخاب شود، زیرا اپل همه اپلیکیشن‌های جدید را ملزم کرده است که به صورت 64 بیتی ارائه شوند و به این ترتیب حد نهایی اعداد صحیح 9 کوانتیلیون است.

با این که دانستن دقیق محدودیت اعداد صحیح مفید است، اما معمولاً همین قدر که بدانید حدود آن چه قدر است و چه زمان به این کران نزدیک شده‌اید، کفایت می‌کند. همچنین باید توجه داشته باشید که هنگام تعریف اعداد صحیح نباید از کاما استفاده کنید و کافی است ارقام عدد را پشت سر هم بنویسید. در مورد اعداد بزرگ جهت سهولت قرائت می‌توانید بین هر سه رقم متوالی از زیرخط استفاده کنید. این ساختار در سوئیفت معتبر است. اعداد 32 بیتی به میزان 32/8 بیت یعنی 4 بایت فضا می‌گیرند؛ اما اعداد صحیح 64 بیتی به میزان 64/8 = 8 بایت از حافظه را اشغال می‌کنند.

اعداد اعشاری (Double/Float)

در سوئیفت برای اعداد اعشاری دو نوع داده متفاوت داریم؛ با این حال این دو نوع داده، طرز عملکرد مشابهی دارند. ما در بخش قبل دیدیم که برای مقادیر کامل می‌توان از نوع داده Int استفاده کرد؛ اما انواع داده Double و Float برای ذخیره‌سازی اعداد اعشاری هستند. باید دقت کنید که نوع داده Float از Double متفاوت است چون دقت اعشاری آن کمتر است. البته این به آن معنی است که نباید از Float استفاده کرد؛ بلکه صرفاً منظور ما این است که اگر برای محاسبه‌هایی مانند محاسبات خط سیر ماه در آسمان به دقت بسیار بالایی نیاز دارید، در این صورت احتمالاً باید از نوع داده Double استفاده کنید. اما اگر می‌خواهید مختصات نقطه‌ای روی کره زمین را ذخیره کنید، می‌توانید از نوع داده Float استفاده کنید. فرض کنید اعلان متغیری به صورت زیر داشته باشیم:

1var myDouble = 0.1234567

در این صورت مقدار myDouble دقیقاً همان مقداری خواهد بود که به آن انتساب داده‌ایم. اما در صورتی که اعلان متغیری به صورت زیر داشته باشیم:

1var myFloat = 0.1234567

در این حالت اگر بخواهیم مقدار myFloat را نمایش دهیم با مقدار 0.123457 مواجه می‌شویم. از آنجا که دقت اعشاری نوع داده Float پایین‌تر است، صرفاً 6 رقم اعشار را می‌توانیم در این نوع داده ذخیره کنیم و از این رو این عدد تا نزدیک‌ترین مقدار ممکن گرد می‌شود که در این مورد رقم 7 انتهایی به 10 گرد شده است و مقدار 1 اضافی روی رقم قبل آخر آمده است. از آنجا که نوع داده Float 32 بیت است، در 4 بایت از حافظه ذخیره می‌شود. نوع داده Double 64 بیت است و بنابراین در 8 بایت از حافظه ذخیره می‌شود و به این ترتیب دقت اعشاری بالاتری به دست می‌آید.

Bool

نوع داده Bool که اختصاری برای عبارت بولی (Boolean) است به افتخار جرج بول (George Boole) که این مفهوم را ابداع کرده، نامگذاری شده است. یادگیری مقادیر بولی بسیار آسان است. این مقدار می‌تواند درست (True) یا نادرست (False) باشد. این نوع داده به صورت زیر وهله‌سازی می‌شود:

1var madeItSo = true

در ادامه این سری مقالات در مورد انواع داده بولی بیشتر صحبت خواهیم کرد؛ اما فعلاً همین قدر بدانید که این نوع داده مبنایی برای شیوه تصمیم‌گیری در برنامه‌ها محسوب می‌شود. مقادیر بولی 1 بایت از حافظه اشغال می‌کنند.

کامنت (Comment)

البته کامنت‌ها یک نوع داده محسوب نمی‌شوند؛ اما به ما کمک می‌کنند که توضیحاتی در کد درج کنیم. بدیهی است که هیچ کس دوست ندارد کدی بنویسد که وقتی سال بعد به آن مراجعه می‌کند، هیچ از آن سر در نیاورد. کامنت ها به رفع این مشکل کمک می‌کنند. دو نوع کامنت در سوئیفت وجود دارند که به صورت کامنت‌های تک خطی و چند خطی نامیده شده‌اند. در کد زیر از هر دو نوع این کامنت‌ها برای توضیح آن چه در کد اتفاق می‌افتد استفاده کرده‌ایم.

1/* this is the start of the comment
2This is a multi-line comment
3*/ //This is the end of the comment noted with a single line comment
4var myString = "Not a comment"
5
6/*
7 * Most people use multi-line comments like this.  It helps them to
8 * know what is and is not a comment
9 */

اکنون که برخی از انواع داده را معرفی کرده‌ایم، می‌توانیم در خصوص مواردی صحبت می‌کنیم که می‌خواهیم متغیری برای ذخیره‌سازی یک مقدار اعلان کنیم؛ اما آن مقدار هنوز وجود ندارد. زمانی که یک متغیر را صرفاً اعلان کرده‌ایم، این متغیر نمی‌داند که باید چه نوع داده‌ای را در خود ذخیره کند. به همین جهت کامپایلر در زمان کامپایل برنامه خطایی صادر می‌کند، چون نمی‌داند که این متغیر چه مقدار از حافظه را اشغال خواهد کرد. رفع این مشکل آسان است:

1// This does not work
2var myString                           // we get a compiler error
3// This is how it should be written
4var myLastName: String
5
6
7var myAge: Int
8// You can, and should, use the type declaration with initial values
9// so you know exactly what the value should be later on
10var totalMiles: Double = 5.0
11var glassesOfWater: Float = 7.0
12
13// Warning: If you use a decimal value without using a type
14// declaration it will default to a Double type in Swift 
15var glassesOfWater = 7.0 // same as var glassesOfWater: Double = 7.0
16// constants also can use type declaration; what type should this
17// be?
18let starDateBirthDay = 47457.1

جمع‌بندی

در این نوشته گام‌های نخست خود را برای یادگیری مفاهیم متغیرها و ثابت‌ها در حافظه برنامه برداشتیم و چیزهایی در مورد فضای مورد نیاز برای این متغیرها آموختیم. شاید فکر کنید این فرایند یادگیری کُند است؛ اما همین قدر که پیشرفت کرده‌ایم نکته مثبتی محسوب می‌شود. راهنماهای زیادی روی اینترنت وجود دارند که سرعت طرح نکات آن‌ها بیشتراست؛ اما ما در این سری مقالات می‌خواهیم مطمئن شویم که شما هم چگونگی و هم چرایی مفاهیم برنامه‌نویسی را می‌آموزید. در بخش بعدی از این سری مقالات برنامه‌نویسی سوئیفت به بررسی انواع مقداری در برابر انواع ارجاعی، اشاره‌گرها و انواع کالکشن (collection) می‌پردازیم.

قسمت دوم این مطلب را از طریق لینک زیر بخوانید:

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۳ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
swift2go
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *