عملگرهای مقایسه دو مقدار از یک نوع را با هم مقایسه میکنند و یک مقدار Bool برمیگردانند (true یا false).
اگر مقادیری از نوعهای متفاوت را با هم مقایسه کنید، کامپایلر خطا میدهد.
عملگرهای مقایسهی استاندارد در Swift عبارتاند از:
| عملگر | توضیح | مثال |
|---|---|---|
== |
برابر است با |
1 == 1 («درست») |
!= |
برابر نیست با |
1 != 2 («درست») |
< |
کوچکتر از |
4 < 5 («درست») |
<= |
کوچکتر یا مساوی |
4 <= 4 («درست») |
> |
بزرگتر از |
3 > 1 («درست») |
>= |
بزرگتر یا مساوی |
2 >= 2 («درست») |
if و else
یک دستور شرطی بر اساس اینکه نتیجهی یک شرط true باشد یا false، کد را اجرا میکند.
رایجترین دستور شرطی، دستور if است که یک بلوک کد را فقط زمانی اجرا میکند که شرطش true باشد.
یک دستور if را با کلیدواژهی if مینویسید؛ بعد از آن شرط و بلوکی از کد میآید که داخل آکولاد قرار گرفته است:
let wheelCount = 4
if wheelCount == 4 {
print("Your vehicle is a car")
}
// Prints "Your vehicle is a car"
میتوانید if را با یک بند else همراه کنید تا وقتی شرط false است، کد جایگزینی اجرا شود:
let precipitationInMM = 0.5
if precipitationInMM > 0.5 {
print("You will need an umbrella")
} else {
print("You will not need an umbrella")
}
// Prints "You will not need an umbrella"
برای آزمودن چند شرط پشت سر هم، دستورها را با else if به هم زنجیر کنید.
یک دستور if به شاخهی else نیازی ندارد، اما میتوانید یکی را بگنجانید تا حالتهایی را پوشش دهید که هیچکدام از شرطها برقرار نیستند:
let favoriteFruit = "Apple"
if favoriteFruit == "Banana" {
print("Your favorite fruit is a banana")
} else if favoriteFruit == "Orange" {
print("Your favorite fruit is an orange")
} else if favoriteFruit == "Apple" {
print("Your favorite fruit is an apple")
} else {
print("Your favorite fruit is not a banana, orange, or apple")
}
// Prints "Your favorite fruit is an apple"
if
در Swift مدرن، از دستورهای if میتوان بهعنوان عبارتهایی که یک مقدار تولید میکنند هم استفاده کرد.
هر شاخه به یک مقدار ارزیابی میشود و همین، تخصیص نتیجه بهصورت شرطی را آسان میکند:
let cpuBits = 32
let architecture = if cpuBits == 64 {
"x86_64"
} else {
"x86_32"
}
print(architecture)
// Prints "x86_32"
عملگر شرطی سهتایی کوتاهنویسی فشردهای برای یک عبارت if-else است.
این عملگر یک شرط را ارزیابی میکند و بسته به اینکه آن شرط true باشد یا false، یکی از دو مقدار را برمیگرداند.
این عملگر سه بخش دارد: condition ? trueExpression : falseExpression.
اگر condition به true ارزیابی شود، trueExpression ارزیابی و برگردانده میشود؛ در غیر این صورت falseExpression ارزیابی و برگردانده میشود.
عملگر سهتایی برای انتخابهای ساده و یکخطی ایدهآل است:
let showFahrenheit = true
let temperatureInCelsius = 30
let temperature = showFahrenheit ? temperatureInCelsius * 9 / 5 + 32 : temperatureInCelsius
print(temperature)
// Prints 86
مثال بالا معادل فشردهای است از:
let showFahrenheit = true
let temperatureInCelsius = 30
let temperature = if showFahrenheit {
temperatureInCelsius * 9 / 5 + 32
} else {
temperatureInCelsius
}
در این تمرین، کدی مینویسید که به شما کمک میکند برای خرید خودرو آماده شوید.
سه کار در پیش دارید: یکی برای تعیین اینکه آیا از عهدهی پرداختهای ماهانه برمیآیید، یکی برای تعیین اینکه به چه گواهینامهای نیاز دارید و یکی برای تخمین قیمت مناسب یک خودروی دستدوم.
همهی نمایندگیهای خودرو در شهر شما یک طرح تشویقی پنجساله با سود ۰٪ اجرا میکنند و شما میخواهید از آن استفاده کنید. اما مطمئن نیستید که از عهدهی پرداختهای ماهانهی خودروی موردنظرتان بربیایید.
پرداخت ماهانه برابر است با قیمت کل خودرو تقسیم بر تعداد ماههای این دورهی پنجساله.
تابع canIBuy(vehicle:price:monthlyBudget:) را پیادهسازی کنید که این پارامترها را میگیرد:
vehicle - اسم خودرویی که میخواهید بخرید.price - قیمت خودرویی که میخواهید بخرید.monthlyBudget - مبلغی که میتوانید هر ماه بپردازید.تابع باید بسته به شرطهای زیر، پیام مربوطه را برگرداند:
"Yes! I'm getting a <vehicle>" را برگردانید."I'll have to be frugal if I want a <vehicle>" را برگردانید."Darn! No <vehicle> for me" را برگردانید.canIBuy(vehicle: "1974 Ford Pinto", price: 516.32, monthlyBudget: 100.00)
// returns "Yes! I'm getting a 1974 Ford Pinto"
canIBuy(vehicle: "2011 Bugatti Veyron", price: 2_250_880.00, monthlyBudget: 10000.00)
// returns "Darn! No 2011 Bugatti Veyron for me"
canIBuy(vehicle: "2020 Indian FTR 1200", price: 12_500, monthlyBudget: 200)
// returns "I'll have to be frugal if I want a 2020 Indian FTR 1200"
تصمیم گرفتهاید یک خودروی دستدوم بخرید و باید تعیین کنید برای راندن آن به چه نوع گواهینامهای نیاز دارید.
تابع licenseType(numberOfWheels:) را پیادهسازی کنید که پارامتر numberOfWheels را میگیرد؛ این پارامتر تعداد چرخهای خودرویی است که میخواهید بخرید.
تابع باید بسته به شرطهای زیر، پیام مربوطه را برگرداند:
"You will need a motorcycle license for your vehicle" را برگردانید."You will need an automobile license for your vehicle" را برگردانید."You will need a commercial trucking license for your vehicle" را برگردانید."We do not issue licenses for those types of vehicles" را برگردانید.licenseType(numberOfWheels: 2)
// returns "You will need a motorcycle license for your vehicle"
licenseType(numberOfWheels: 6)
// returns "You will need an automobile license for your vehicle"
licenseType(numberOfWheels: 18)
// returns "You will need a commercial trucking license for your vehicle"
licenseType(numberOfWheels: 0)
// returns "We do not issue licenses for those types of vehicles"
حالا که تصمیمتان را گرفتهاید، میخواهید مطمئن شوید که در نمایندگی قیمت منصفانهای میپردازید. چون میخواهید یک خودروی دستدوم بخرید، قیمت به سن خودرو بستگی دارد. برای یک تخمین تقریبی، فرض کنید اگر خودرو کمتر از ۳ سال سن داشته باشد، ۸۰٪ قیمتی را هزینه دارد که هنگام نو بودن داشت. اگر حداقل ۱۰ سال سن داشته باشد، ۵۰٪ قیمت را هزینه دارد. اگر خودرو حداقل ۳ سال سن داشته باشد اما بیش از ۱۰ سال نداشته باشد، ۷۰٪ قیمت اولیه را هزینه دارد.
تابع calculateResellPrice(originalPrice:yearsOld:) را پیادهسازی کنید که پارامتر originalPrice، یعنی قیمت اولیهی خودرو، و پارامتر yearsOld، یعنی سن خودرو بر حسب سال، را میگیرد.
تابع باید قیمت فروش مجدد خودرو را برگرداند.
calculateResellPrice(originalPrice: 1000, yearsOld: 1)
// returns 800
calculateResellPrice(originalPrice: 1000, yearsOld: 5)
// returns 700
calculateResellPrice(originalPrice: 1000, yearsOld: 15)
// returns 500