در Go میتوان اعداد را با عملگرهای رابطهای و برابری زیر مقایسه کرد.
| Comparison | Operator |
|---|---|
| برابر | == |
| نابرابر | != |
| کوچکتر | < |
| کوچکتر یا برابر | <= |
| بزرگتر | > |
| بزرگتر یا برابر | >= |
نتیجهی مقایسه همیشه یک مقدار منطقی است، یعنی یا true یا false.
a := 3
a != 4 // true
a > 5 // false
عملگرهای مقایسهی بالا را میتوان برای مقایسهی رشتهها هم به کار برد. در این حالت یک ترتیب واژهنامهای (مانند فرهنگ لغت) اعمال میشود. برای مثال:
"apple" < "banana" // true
"apple" > "banana" // false
دستورهای شرطی در Go مانند دستورهای شرطی در زبانهای دیگر هستند.
نوع زیرین هر عملیات شرطی، نوع bool است که میتواند مقدار true یا false داشته باشد.
دستورهای شرطی اغلب به عنوان سازوکارهای کنترل جریان برای بررسی شرطهای مختلف به کار میروند.
برای بررسی یک حالت خاص میتوان از دستور if استفاده کرد که اگر شرط زیرین true باشد، کدش را اجرا میکند، به این شکل:
var value string
if value == "val" {
return "was val"
}
در موقعیتهایی که بیش از یک حالت درگیر است، میتوان چندین دستور if را با استفاده از دستورهای else if و else به هم زنجیره کرد.
var number int
result := "This number is "
if number > 0 {
result += "positive"
} else if number < 0 {
result += "negative"
} else {
result += "zero"
}
دستورهای شرطی میتوانند یک دستور مقداردهی اولیهی کوتاه هم داشته باشند که با آن میتوان یک یا چند متغیر را برای دستور if مقداردهی اولیه کرد.
برای مثال:
num := 7
if v := 2 * num; v > 10 {
fmt.Println(v)
} else {
fmt.Println(num)
}
// Output: 14
نکته: هر متغیری که در دستور مقداردهی اولیه ساخته شود، پس از پایان دستور
ifاز حوزهی دسترس خارج میشود.
در این تمرین قرار است کدی بنویسید که به شما در آمادهشدن برای خرید یک وسیلهی نقلیه کمک کند.
سه کار پیش رو دارید: یکی تعیین اینکه به گواهینامه نیاز دارید یا نه، یکی کمک به انتخاب بین دو وسیلهی نقلیه و یکی تخمین زدن قیمت قابلقبولی که برای یک وسیلهی نقلیهی دستدوم منصفانه است.
رانندگی با برخی از انواع وسیلهی نقلیه به گواهینامهی رانندگی نیاز دارد.
فرض کنید فقط انواع "car" و "truck" به گواهینامه نیاز دارند و از بقیه میتوان بدون گواهینامه استفاده کرد.
تابع NeedsLicense(kind) را پیادهسازی کنید که نوع وسیلهی نقلیه را میگیرد و یک مقدار «منطقی» برمیگرداند که نشان میدهد آیا برای همان نوع وسیله به گواهینامه نیاز دارید یا نه.
needLicense := NeedsLicense("car")
// => true
needLicense = NeedsLicense("bike")
// => false
needLicense = NeedsLicense("truck")
// => true
شما گزینههای وسیلههای نقلیهی موجود را بررسی میکنید.
موفق میشوید آنها را به دو گزینه محدود کنید، اما برای گرفتن تصمیم نهایی به کمک نیاز دارید.
برای این کار، تابع ChooseVehicle(option1, option2) را پیادهسازی کنید که دو وسیلهی نقلیه را به عنوان آرگومان میگیرد و تصمیمی برمیگرداند که شامل گزینهای است که در ترتیب واژهنامهای اول میآید.
vehicle := ChooseVehicle("Wuling Hongguang", "Toyota Corolla")
// => "Toyota Corolla is clearly the better choice."
ChooseVehicle("Volkswagen Beetle", "Volkswagen Golf")
// => "Volkswagen Beetle is clearly the better choice."
حالا که تصمیمتان را گرفتهاید، میخواهید مطمئن شوید که در نمایندگی قیمت منصفانهای میپردازید. چون میخواهید یک وسیلهی نقلیهی دستدوم بخرید، قیمت به عمر وسیله بستگی دارد. برای یک تخمین تقریبی، فرض کنید اگر عمر وسیله کمتر از ۳ سال باشد، ۸۰٪ قیمت اصلیاش را دارد، یعنی همان قیمتی که وقتی کاملاً نو بود. اگر حداقل ۱۰ سال عمر داشته باشد، ۵۰٪ قیمت اصلی را دارد. اگر عمر وسیله حداقل ۳ سال ولی کمتر از ۱۰ سال باشد، ۷۰٪ قیمت اصلی را دارد.
تابع CalculateResellPrice(originalPrice, age) را پیادهسازی کنید که این منطق را با استفاده از if، else if و else اعمال میکند (اگر میخواهید تمرین کنید، راههای دیگری هم هست).
این تابع قیمت اصلی و عمر وسیلهی نقلیه را به عنوان آرگومان میگیرد و قیمت تخمینی در نمایندگی را برمیگرداند.
CalculateResellPrice(1000, 1)
// => 800
CalculateResellPrice(1000, 5)
// => 700
CalculateResellPrice(1000, 15)
// => 500
توجه مقدار بازگشتی یک float64 است.