کلاس
کلاس به شما اجازه میدهد، یک نوع داده تعریف کنید که، شامل فیلدها، خواص (properties) و توابع است. کلاس در حکم یک نقشه برای یک شیء میباشد. شیء یک چیز واقعی است که از ساختار، خواص و یا رفتارهای کلاس پیروی میکند. وقتی یک شیء میسازید، یعنی اینکه، یک نمونه از کلاس ساختهاید (در درس ممکن است از کلمات شیء و نمونه به جای هم استفاده شود). برای تعریف یک کلاس از کلمه کلیدی class به صورت زیر استفاده میشود :
class ClassName { field1 field2 ... fieldN method1 method2 ... methodN }
این کلمه کلیدی را قبل از نامی که برای کلاسمان انتخاب میکنیم مینویسیم. در نامگذاری کلاسها هم از روش نامگذاری Pascal استفاده میکنیم. در بدنه کلاس فیلدها و توابع آن قرار داده میشوند. فیلدها اعضای دادهای خصوصی هستند که کلاس از آنها برای رفتارها و ذخیره مقادیر خاصیتهایش (property) استفاده میکند. در اصل، می توان گفت که، فیلد همان متغیر است که، در داخل کلاس تعریف می شود. توابع، رفتارها یا کارهایی هستند که، یک کلاس میتواند انجام دهد. در زیر نحوه تعریف و استفاده از یک کلاس ساده به نام person نشان داده شده است.
1: class Person 2: { 3: var name: String = "" 4: var age: Int = 0 5: var height: Double = 0.0 6: 7: func tellInformation() 8: { 9: print("Name : \(name)") 10: print("Age : \(age) years old") 11: print("Height: \(height) cm") 12: } 13: } 14: 15: let firstPerson = Person() 16: let secondPerson = Person() 17: 18: firstPerson.name = "Jack" 19: firstPerson.age = 21 20: firstPerson.height = 160.0 21: firstPerson.tellInformation() 22: 23: print() //Separator 24: 25: secondPerson.name = "Mike" 26: secondPerson.age = 23 27: secondPerson.height = 158.0 28: secondPerson.tellInformation()
Name : Jack Age : 21 years old Height: 160.0 cm Name : Mike Age : 23 years old Height: 158.0 cm
در خطوط 13-1 کد بالا یک کلاس با نام Person تعریف شده است. در خط 1 یک نام به کلاس اختصاص دادهایم تا به وسیله آن قابل دسترسی باشد. در داخل بدنه کلاس، فیلدهای آن تعریف شدهاند (خطوط 5-3).
این سه فیلد تعریف شده، خصوصیات واقعی یک فرد در دنیای واقعی را، در خود ذخیره میکنند. یک فرد در دنیای واقعی دارای نام، سن، و قد میباشد. در خطوط 12-7 یک تابع هم در داخل کلاس به نام tellInformation() تعریف شده است که رفتار کلاسمان است و مثلاً اگر از فرد سوالی بپرسیم در مورد خودش چیزهایی میگوید. در داخل تابع کدهایی برای نشان دادن مقادیر موجود در فیلدها نوشته شده است. نکتهای درباره فیلدها وجود دارد و این است که چون فیلدها در داخل کلاس تعریف و به عنوان اعضای کلاس در نظر گرفته شدهاند، محدوده آنها یک کلاس است.
این بدین معناست که فیلدها فقط میتوانند در داخل کلاس یعنی جایی که به آن تعلق دارند و یا به وسیله نمونه ایجاد شده از کلاس، مورد استفاده قرار بگیرند. در خطوط 15 و 16 دو نمونه یا دو شیء از کلاس Person ایجاد میکنیم. برای ایجاد یک نمونه از یک کلاس ابتدا یک متغیر تعریف کرده و به دنبال آن بعد از علامت مساوی، نام کلاس و یک جفت پرانتز قرار دهیم. وقتی نمونه کلاس ایجاد شد، سازنده را صدا میزنیم. یک سازنده تابع خاصی است که برای مقداردهی اولیه به فیلدهای یک شیء به کار میرود. وقتی هیچ آرگومانی در داخل پرانتزها قرار ندهید، کلاس یک سازنده پیشفرض بدون پارامتر را فراخوانی میکند. درباره سازندهها در درسهای آینده توضیح خواهیم داد.
در خطوط 21-18 مقادیری به فیلدهای اولین شیء ایجاد شده از کلاس Person (first Person) اختصاص داده شده است. برای دسترسی به فیلدها یا توابع یک شیء از علامت نقطه (دات) استفاده میشود. به عنوان مثال کد firstPerson.name نشان دهنده فیلد name از شیء firstPerson میباشد. برای چاپ مقادیر فیلدها باید تابع tellInformation() شیء firstPerson را فراخوانی میکنیم.
در خطوط 28-25 نیز مقادیری به شیء دومی که قبلاً از کلاس ایجاد شده تخصیص میدهیم و سپس تابع tellInformation() را فراخوانی میکنیم. به این نکته توجه کنید که firstPerson و secondPerson نسخههای متفاوتی از هر فیلد دارند. بنابراین تعیین یک نام برای secondPerson هیچ تاثیری بر نام firstPerson ندارد. در مورد اعضای کلاس در درسهای آینده توضیح خواهیم داد.