Go Beginners Series: Control Flow عبارت: If-else، Switch و Loops

دستورات جریان کنترل یکی از مفاهیم اصلی در برنامه نویسی است زیرا به شما امکان می دهد برنامه های کاربردی انعطاف پذیر و پویا بسازید. آنها به قدری مهم هستند که همه زبان های برنامه نویسی به نوعی آنها را مشخص می کنند و Go نیز از این قاعده مستثنی نیست.
در مقاله قبلی، با متغیرها، انواع مختلف اعلان متغیرها، انواع داده ها، عملگرها، مجموعه های مختلف عملگرها و موارد استفاده از آنها در Go آشنا شدید. در این مقاله، نحوه استفاده از دستورات و حلقههای جریان کنترل در Go را بررسی خواهیم کرد.
کنترل جریان در Go
جریان کنترل که به عنوان جریان اجرا نیز شناخته می شود، ترتیبی است که برنامه شما در آن اجرا می شود. در Go، برنامه از قسمت شروع به اجرا می کند main
عملکرد در داخل main.go
فایل، که نقطه شروع برنامه است. کد زیر را در نظر بگیرید:
package main
import (
"fmt"
)
var name, surname string = "John", "Doe"
var uniName, major string = "The University of California", "Computer Science"
func main() {
isStudent := true
accessToUniAid := false
fmt.Println(accessToUniAid, isStudent)
fmt.Print("\n")
fmt.Println("Mr.", name, surname, "is a student and he is studying", major, "at", uniName, "He is a student and has access to the university financial aid")
fmt.Print("\n")
fmt.Println("Mr.", name, surname, "is not a student and he is not studying", "at", uniName, "Therefore he doesn't have access to the university financial aid")
}
کد بالا به ترتیب زیر اجرا می شود:
- فایل را به عنوان بخشی از
main
بسته بندی - وارد کنید
fmt
بسته بندی - اعلام
name
وsurname
متغیرها - اعلام
uniName
وmajor
متغیرها - را اجرا کنید
main
عملکرد و:- اعلام
isStudent
وaccessToUniAid
متغیرها - چاپ مقادیر
isStudent
وaccessToUniAid
. - یک خط خالی چاپ کنید.
- چاپ
"Mr. John Doe is a student, and he is studying Computer Science at the University of California. He is a student and has access to the university financial aid"
. - یک خط خالی چاپ کنید.
- چاپ
"Mr. John Doe is not a student, and he is not studying at the University of California. Therefore, he doesn't have access to the university financial aid
.
- اعلام
در حالی که دقیقاً اینگونه است که باید اجرا شود، این روش ایده آلی برای نوشتن برنامه نیست زیرا کاربران پیام هایی را می بینند که مربوط به آنها نیست و قطعاً آنها را گیج می کند.
Go راهی را برای شما فراهم می کند تا جریان کنترل برنامه خود را دستکاری کنید تا بتواند با کاربران به مرتبط ترین و کارآمدترین شکل ممکن با استفاده از if-else
بیانیه.
نحوه استفاده if-else
بیانیه ها در Go
if-else
دستورات در Go برای تنظیم جریان اجرا استفاده می شود تا برنامه های شما بتوانند به طور قابل پیش بینی کار کنند. برای مثال، بلوک کد قبلی قرار بود فقط یکی از عبارات را بر اساس اینکه کاربر چه کسی است چاپ کند. را ویرایش کنید main
تابع به شکل زیر است:
func main() {
isStudent := true
accessToUniAid := true
fmt.Println(accessToUniAid, isStudent)
if isStudent && accessToUniAid {
fmt.Println("Mr.", name, surname, "is a student and he is studying", major, "at", uniName, "He is a student and has access to the university financial aid")
} else {
fmt.Println("Mr.", name, surname, "is not a student and he is not studying", "at", uniName, "Therefore he doesn't have access to the university financial aid")
}
}
کد بالا مانند بلوک کد قبلی است اما این بار از آن استفاده کردم if-else
و &&
عملگر منطقی که در مقاله قبلی یاد گرفتید برای بررسی اینکه آیا کاربر دانشجو است و به کمک دانشگاه دسترسی دارد و سپس پاسخی را بر اساس نتیجه عبارت چاپ می کند. کد داخل درست است if
مهاربندهای فرفری {}
برای کاربر چاپ می شود و از بررسی های باقی مانده صرف نظر می کند.
این else if
مسدود کردن
Go به شما این امکان را می دهد که بررسی های اضافی بین آنها انجام دهید if
و else
بلوک ها را برای انعطاف پذیرتر کردن برنامه های شما. به عنوان مثال، اگر کاربر دانشجو است اما به کمک دانشگاه دسترسی ندارد و میخواهید پاسخی بدهید که نحوه دسترسی به آن را نشان میدهد، میتوانید این کار را به صورت زیر انجام دهید:
func main() {
isStudent := false
accessToUniAid := false
fmt.Println(accessToUniAid, isStudent)
if isStudent && accessToUniAid {
fmt.Println("Mr.", name, surname, "is a student and he is studying", major, "at", uniName, "He is a student and has access to the university financial aid")
} else if isStudent && !accessToUniAid {
fmt.Println("Mr.", name, surname, "is a student and he is studying", major, "at", uniName, "He is a student but doesn't have access to the university financial aid. He can check if he is eligible for the financial aid by visiting the Eligibility page on the university website")
} else {
fmt.Println("Mr.", name, surname, "is not a student and he is not studying", "at", uniName, "Therefore he doesn't have access to the university financial aid")
}
}
کد بالا مانند بلوک کد قبلی است اما این بار از آن استفاده کردم else if
و !
عملگر منطقی که در مقاله قبل یاد گرفتید برای اضافه کردن یک چک اضافی که ببیند کاربر دانشجو است اما به کمک دانشگاه دسترسی ندارد و سپس پاسخی را بر اساس نتیجه عبارت چاپ می کند.
حال، جریان اجرای برنامه شما به مقدار آن بستگی دارد accessToUniAid
و isStudent
متغیرها و به صورت زیر اجرا خواهد شد:
- فایل را به عنوان بخشی از
main
بسته بندی - وارد کنید
fmt
بسته بندی - اعلام
name
وsurname
متغیرها - اعلام
uniName
وmajor
متغیرها - را اجرا کنید
main
عملکرد و:- اعلام
isStudent
وaccessToUniAid
متغیرها - چاپ مقادیر
isStudent
وaccessToUniAid
. - بررسی می کند اگر
accessToUniAid
وisStudent
متغیرها درست هستند اگر بله، سپس چاپ می شود"Mr. John Doe is a student and he is studying Computer Science at the University of California. He is a student and has access to the university financial aid"
و از برنامه خارج می شود. اگر نه، اجرا را ادامه می دهد. - بررسی می کند اگر
isStudent
درست است وaccessToUniAid
نادرست است اگر بله، سپس چاپ می شود"Mr. John Doe is a student and he is studying Computer Science at the University of California He is a student but doesn't have access to the university financial aid. He can check if he is eligible for the financial aid by visiting the Eligibility page on the university website"
و از برنامه خارج می شود. اگر نه، اجرا را ادامه می دهد. - اگر برنامه به این قسمت برسد یعنی
accessToUniAid
وisStudent
متغیرها هر دو نادرست هستند بنابراین چاپ می شود"Mr. John Doe is not a student and he is not studying at University of California Therefore he doesn't have access to the university financial aid
.
- اعلام
اکنون برنامه شما می تواند به کاربر بر اساس وضعیت او پاسخ دهد. بازی در اطراف با ارزش های accessToUniAid
و isStudent
متغیرها تا ببینید چه پاسخی دریافت می کنید.
توجه: می توانید تعداد زیادی را اضافه کنید
else if
بلوک های ممکن بین شماif
وelse
بلوک ها
کوتاه نویسی if-else
مسدود کردن
می توانید از یک اعلان متغیر مختصر با یک استفاده کنید if-else
بلوک کردن به این صورت:
func main() {
if isStudent, accessToUniAid := true, true; isStudent && accessToUniAid {
fmt.Println("Mr.", name, surname, "is a student and he is studying", major, "at", uniName, "He is a student and has access to the university financial aid")
} else if isStudent && !accessToUniAid {
fmt.Println("Mr.", name, surname, "is a student and he is studying", major, "at", uniName, "He is a student but doesn't have access to the university financial aid. He can check if he is eligible for the financial aid by visiting the Eligibility page on the university website")
} else {
fmt.Println("Mr.", name, surname, "is not a student and he is not studying", "at", uniName, "Therefore he doesn't have access to the university financial aid")
}
}
کد بالا مانند بلوک کد قبلی اما با اعلان متغیر کوتاه کار می کند.
توجه: هنگام استفاده از نحو مختصر،
accessToUniAid
وisStudent
متغیرها فقط در موجود هستندif-else
بلوک کد، به این معنی که پس از اجرای کد برای استفاده در دسترس نخواهند بودif
مسدود کردن.
بعد، بیایید نحوه استفاده از آن را ببینیم switch
بیانیه در بخش بعدی
این switch
بیانیه در Go
برو فراهم می کند switch
بیانیه به عنوان جایگزینی برای if-else
عبارات در مواردی که چندتایی دارید else if
بلوک یا پیچیده if-else
بیانیه. به عنوان مثال، اگر می خواهید پاسخ متفاوتی را برای کاربر ارسال کنید که در چه روزی است، کد زیر را به خود اضافه کنید main
تابع:
dayOfWeek := "Sunday"
switch dayOfWeek {
case "Monday":
fmt.Println("It's Monday, time to start the week!")
case "Tuesday":
fmt.Println("It's Tuesday, already two days down.")
case "Wednesday":
fmt.Println("It's Wednesday, halfway through the week!")
case "Thursday":
fmt.Println("It's Thursday, one more day to go.")
case "Friday":
fmt.Println("It's Friday, time to celebrate!")
case "Saturday":
fmt.Println("It's Saturday, weekend is here!")
case "Sunday":
fmt.Println("It's Sunday, time to relax.")
}
کد بالا a را تعریف می کند dayOfWeek
متغیر و از a استفاده می کند switch
بیانیه ای برای بررسی اینکه چه روزی از هفته است و بر اساس آن پاسخی را چاپ می کند.
بررسی موارد متعدد در Go
گاهی اوقات، ممکن است بخواهید چندین مقدار را بررسی کنید و بر اساس آن پاسخی را برگردانید. با استفاده از مثال قبلی، اگر می خواهید بررسی کنید که آیا روزها در انگلیسی یا اسپانیایی درست هستند، می توانید این کار را با کاما انجام دهید (,
) اینطوری:
dayOfWeek := "Miércoles"
switch dayOfWeek {
case "Monday", "Lunes":
fmt.Println("It's", dayOfWeek, "time to start the week!")
case "Tuesday", "Martes":
fmt.Println("It's", dayOfWeek, "already two days down.")
case "Wednesday", "Miércoles":
fmt.Println("It's", dayOfWeek, " halfway through the week!")
case "Thursday", "Jueves":
fmt.Println("It's", dayOfWeek, "one more day to go.")
case "Friday", "Viernes":
fmt.Println("It's", dayOfWeek, "time to celebrate!")
case "Saturday", "Sábado":
fmt.Println("It's", dayOfWeek, "weekend is here!")
case "Sunday", "Domingo":
fmt.Println("It's", dayOfWeek, "time to relax.")
}
کد بالا مانند بلوک کد قبلی عمل می کند، اما این بار، همچنین بررسی می کند که آیا روز به زبان اسپانیایی نوشته شده است یا خیر و مطابق با آن پاسخ می دهد.
این default
مورد
Go به شما اجازه می دهد تا a اضافه کنید default
مورد تا پایان پرونده های شما برای پاسخ به هر مقداری که موردی را برای آن مشخص نکرده اید، پاسخ دهید. به عنوان مثال، اگر کاربر اشتباهاً مقدار کد را به آن بدهد، چیزی را چاپ نخواهد کرد "Tuesdays"
، که کاربر را گیج می کند زیرا آنها نمی دانند چه اشتباهی رخ داده است. با این حال، شما می توانید آن را با یک رفع کنید default
موردی مانند این:
dayOfWeek := "Miércoless"
switch dayOfWeek {
case "Monday", "Lunes":
fmt.Println("It's", dayOfWeek, "time to start the week!")
case "Tuesday", "Martes":
fmt.Println("It's", dayOfWeek, "already two days down.")
case "Wednesday", "Miércoles":
fmt.Println("It's", dayOfWeek, " halfway through the week!")
case "Thursday", "Jueves":
fmt.Println("It's", dayOfWeek, "one more day to go.")
case "Friday", "Viernes":
fmt.Println("It's", dayOfWeek, "time to celebrate!")
case "Saturday", "Sábado":
fmt.Println("It's", dayOfWeek, "weekend is here!")
case "Sunday", "Domingo":
fmt.Println("It's", dayOfWeek, "time to relax.")
default:
fmt.Println(dayOfWeek, "is not a valid day of the week.")
}
کد بالا مانند بلوک کد قبلی عمل میکند، اما این بار، یک مورد پیشفرض اضافه کردم که در صورتی که مقدار یک روز معتبر در هفته در هر دو زبان انگلیسی و اسپانیایی نباشد، پاسخی را چاپ میکند.
حلقه در Go
یک حلقه در برنامه نویسی راهی برای انجام چندین بار یک کار خاص است که معمولاً بر اساس یک شرط است. برخلاف سایر زبان های برنامه نویسی، Go تنها یک روش حلقه دارد که آن است for
حلقه
نحوه استفاده از for
حلقه در Go
یک پایه for
حلقه در Go به شکل زیر خواهد بود:
for count := 0; count < 5; count++ {
fmt.Println(count)
}
کد بالا چاپ خواهد شد 0 1 2 3 4
و از برنامه خارج شوید. اولین قسمت حلقه مقداردهی اولیه متغیر است. در این مورد، count
; قسمت دوم شرطی است که بررسی می کند که آیا count
کمتر از 5 است؛ قسمت سوم پستی است که 1 را به ارزش اضافه می کند count
و در نهایت، عبارت print داخل بریس فرفری مقدار of را چاپ خواهد کرد count
هر بار که شرایط برمی گردد true
.
همچنین count
متغیر فقط در داخل حلقه موجود است و پس از اتمام حلقه از بین خواهد رفت. با این حال، می توانید متغیر را در خارج از حلقه به این صورت اعلام کنید:
count := 0
for count < 5 {
count++
fmt.Println(count)
}
کد بالا مانند بلوک قبلی است اما چاپ خواهد شد 1 2 3 4 5
چون الان دارم count++
که 1 به مقدار اضافه می کند count
داخل بریس های فرفری قبل از چاپ مقدار آن.
این break
کلمه کلیدی
Go به شما امکان می دهد یک حلقه را بر اساس یک شرط با استفاده از آن متوقف کنید break
بیانیه ای مانند این:
count := 0
for count < 5 {
count++
fmt.Println(count)
if count >= 3 {
break
}
}
کد بالا مانند بلوک قبلی است اما چاپ خواهد شد 1 2 3
چون من الان یک break
بیانیه یک بار ارزش count
بزرگتر یا مساوی 3 است.
این continue
کلمه کلیدی
شما آن را حدس زدید! این continue
کلمه کلیدی برای ادامه حلقه پس از انجام کاری در داخل حلقه استفاده می شود مانند:
for count := 0; count <= 10; count++ {
if count == 3 {
fmt.Println("Third time is the charm")
continue
}
fmt.Println("count is", count)
}
کد بالا مانند بلوک قبلی است اما چاپ خواهد شد "Third time is the charm"
زمانی که ارزش count
قبل از ادامه حلقه برابر با 3 است.
حلقههای تودرتو در Go
Go به شما امکان می دهد حلقه ها را به سادگی با قرار دادن یک حلقه دیگر در داخل یک حلقه مانند زیر قرار دهید:
for a := 0; a < 5; a++ {
for b := 0; b <= a; b++ {
fmt.Printf("a: %d, b: %d\n", a, b)
}
fmt.Println()
}
کد بالا حلقه ای را تعریف می کند که حلقه دیگری در داخل آن قرار دارد و نتیجه زیر را برمی گرداند:
a: 0, b: 0
a: 1, b: 0
a: 1, b: 1
a: 2, b: 0
a: 2, b: 1
a: 2, b: 2
a: 3, b: 0
a: 3, b: 1
a: 3, b: 2
a: 3, b: 3
a: 4, b: 0
a: 4, b: 1
a: 4, b: 2
a: 4, b: 3
a: 4, b: 4
و این برای حلقه ها در Go است!
نتیجه
به عنوان یک برنامه نویس، کنترل کارآمد جریان برنامه های خود بسیار مهم است. در این مقاله نحوه استفاده از آن را یاد گرفتید if
، else if
، else
، و switch
بیانیه هایی برای کنترل جریان اجرای برنامه های شما.
شما همچنین نحوه اجرای وظایف را چندین بار در Go با استفاده از حلقه ها بررسی کرده اید. لطفا نظرات، اصلاحات، سوالات و پیشنهادات خود را در قسمت نظرات مطرح کنید و من به همه آنها پاسخ خواهم داد. خیلی ممنون که خواندید، و در قسمت بعدی شما را خواهم دید!