در این آموزش نحوه تعریف حلقه ها را در سویفت یاد خواهیم داد.
نحوه ایجاد حلقه در سویفت
سویفت هم مانند همه زبانهای دیگر امکان ایجاد حلقه را دارد، حلقه ها برای اجرای چندباره کدها بکار میروند. مثالا تصور کنید که بخواهید معدل تمام دانش آموزان یک کلاس را به نمایش بگذارید، یک حلقه ایجاد می کنید و فرمول معدل را به آن داده و شرطی برای خروج از حلقه تعیین می کنید ،که اگر تعداد معدل چاپ شده با تعداد شاگردان برابر بود از حلقه خارج شوید.
در زبان سویفت چند نوع حلقه وجود دارد، این حلقه ها را باهم مرور می کنیم.
دسته اول حلقه های While و repeat while :
دسته اول حلقه های سویفت برای برنامه نویسان بسیار آشنا هستند، در حلقه while شما متغییری را تعیین کرده و در While برای آن شرطی میگذارید، تا زمان درست بودن شرط حلقه به اجرا در می آید . اینکار به این ترتیب صورت میگیرد که شرط ابتدا چک شده و در صورت درست بودن آن ، کدهای داخل حلقه به نمایش در می آیند.
حلقه repeat while درست مانند حلقه Do while در زبان سی عمل می کند و یکبار دستورات درون حلقه را اجرا و بعد درستی شرط حلقه را چک می کند. به این ترتیب دستورات درون حلقه حداقل یکبار اجرا میشوند. تابع فیبوناچی را میتوان با این حلقه ایجاد کرد.
نحوه استفاده از حلقه while :
دستور While یک شرط و یک جمله دارد که در صورت درست بودن شرط جمله به اجرا در میاید :
while condition {
statements
}
مثال کاربرد حلقه while:
در مثال زیر تمام اعداد بین 1 تا 10 را چاپ کرده ایم. ما باید برای اینکار متغییری را با مقدار عددی یک تعریف کرده و سپس آن را تا زمانی که از عدد 10 کوچکتر و یا مساوی با آن است با عدد 1 جمع میکنیم و نتیجه را پرینت میگیریم:
var i = 1
while i <= 10 {
print(i)
i = i + 1
}
نحوه استفاده از حلقه repeat while:
این حلقه یک جمله را به اجرا درآورده و سپس شرطی را برای تکرار جمله مطرح می کند:
repeat {
statements
} while condition
در زیر همان مثال چاپ اعداد یک تا ده را با حلقه repeat while حل کرده ایم:
var i = 1
repeat {
print(i)
i = i + 1
} while i < 10
هر دو حلقه While و repeat برای حلقه های که اعداد درون گام های حلقه نامشخص هستند کارایی زیادی دارند. یک مثال بزنیم.
تبدیل یک عدد به کد باینری با حلقه While:
برای انجام اینکار باید ابتدا عدد را به 2 تقسیم کنیم و اینکار را تا زمانیکه به عدد صفر برسیم ادامه دهیم . حالا باید باقیمانده های تقسیم را از راست به چپ درج کنیم تا عدد باینری را بدست بیاوریم.
var number = 123
var binary = 0
var digit = 1
while number > 0 {
let reminder = number % 2
// add the new digit to the number
binary = digit * reminder + binary
// move the digit to the left
digit *= 10
// remove the last binary digit
number /= 2
}
binary // 1111011
حلقه بعدی که باید به آن بپردازیم حلقه For است.
حلقه For in:
ما در زبان های دیگر درون حلقه For یک شرط تعیین میکردیم مثلا در زبان سی به این صورت عمل می کردیم:
for( i = 1; i <= 10; i = i + 1 ){
printf("number:", i);
}
در سویفت حلقه For کمی متفاوت عمل می کند، این حلقه میتواند یک دامنه را بعنوان دامنه عملکرد دریافت کند. دامنه های عملکرد به این دو صورت تعریف می شوند:
1...3 // 1, 2, 3
1..<3 // 1, 2
در مثال زیر ما با حلقه For اعداد 1 تا 10 را پرینت کرده ایم.
// prints 1-10
for i in 1...10 {
print(i)
}
// prints 0-9
for i in 0..<10 {
print(i)
}
اگر میخواهید دامنه ای از اعداد را بصورت معکوس پرینت کنید میتوانید از دستور زیر استفاده کنید.
// this will print the numbers from 10 to 1
for i in (1...10).reversed() {
print(i)
}
نکته اگر از دستور زیر استفاده کنید کد شما با ارور مواجه میشود.
// this will crash - don't do it! :)
for i in 10...1 {
print(i)
}
استفاده از For بدون متغییر اولیه :
سویفت یک امکان بامزه برای شما محیا میکند و آنهم امکان تعریف متغیری به نام _ است که نیازی به از پیش تعریف شدن ندارد و برای زمانی که نمی خواهید یک متغییر اضافه ایجاد کنید کاربرد دارد .
مثال: ما میخواهیم متنی را پنج بار چاپ کنیم، برای اینکار دستور زیر را استفاده خواهیم کرد:
for _ in 1...5 {
print("Hello World")
}
سرعت اجرای این حلقه بسیار بالاتر از حلقه های دارای متغیر اضافه میباشند و سویفت هیچ پردازشی روی آن انجام نمی دهد و تنها به تعداد خواسته شده متن را پرینت می کند.
حلقه stride
به مثال حلقه For بازگشته و به کدی که برای For در زبان های برنامه نویسی دیگر نوشته ایم نگاهی بیاندازید . اگر این کد نویسی بریتان جذاب بوده است، در سویفت این روش کد نویسی را در Stride داریم نگاهی به ساختار این کد بیاندازیم:
stride)from:start,to:end, by:step)
درک این ساختار شاید کمی سخت باشد بجای توضیح آن به مثال زیر نگاهی بیاندازید:
stride(from: 1, to: 10, by: 2) // 1, 3, 5, 7, 9
stride(from: 1, to: 2, by: 0.1) // 1.0, 1.1 ... 1.9
درست مانند دستور For در زبان سی در دستور Stride شما یک عدد را برای شروع به متغییر داده و سپس حد نهایی آن را مشخص می کنید و در انتها هم عددی را که در هربار تکرار باید به عدد اول افزوده شود را وارد می کنیم.
ترکیب حلقه Stride و for:
در این مثال یک حلقه ایجاد کرده که از یک تا 10 را چاپ می کند و هربار عدد 3 را به متغییر i می افزاید . این مثال برای چاپ مضارب 3 موجود در یک دامنه کارایی دارد:
for i in stride(from: 1, to: 10, by: 3) {
print(i)
}
همانطور که میبینید سویفت کد نویسی رابسیار ساده تر از زبان های دیگر انجام میدهد.
اگر بخواهیم حلقه شمارش را معکوس انجام دهد از کد های زیر استفاده می کنیم.
for i in stride(from: 3, to: 1, by: -1) {
print(i)
}
// prints: 3 2 1
چاپ و ترمیناتور
در سویفت دستوری به نام terminator وجود دارد که کدی، که در انتهای، یک خط تایپ شده، باید پرینت شود، را مشخص می کند. اگر هنگام پرینت از دستور terminator استفاده نکنید. Terminator پیشفرض یعنی “\n” که کارش ایجاد خط جدید است چاپ می شود. به این دستورالعمل ها نگاه کنید:
print(value) will print the value and a new line
print(value, terminator: "") will print the value
حالا این مثال را در نظر بگیرید:
print("BAT", terminator: "") // prints BAT
print("MAN", terminator: "") // prints MAN
print("") // prints a newline character
// BATMAN
print("BAT")
print("MAN")
// BAT
// MAN
شرکت برنامه نویسی سارگون آماده همکاری با کلیه شرکت ها و سازمان ها جهت انجام پروژه های برنامه نویسی IOS و تولید نرم افزار های کاربردی و تخصصی میباشد.