برنامه نویسی

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")
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کد بالا به ترتیب زیر اجرا می شود:

  1. فایل را به عنوان بخشی از main بسته بندی
  2. وارد کنید fmt بسته بندی
  3. اعلام name و surname متغیرها
  4. اعلام uniName و major متغیرها
  5. را اجرا کنید 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 متغیرها و به صورت زیر اجرا خواهد شد:

  1. فایل را به عنوان بخشی از main بسته بندی
  2. وارد کنید fmt بسته بندی
  3. اعلام name و surname متغیرها
  4. اعلام uniName و major متغیرها
  5. را اجرا کنید 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 با استفاده از حلقه ها بررسی کرده اید. لطفا نظرات، اصلاحات، سوالات و پیشنهادات خود را در قسمت نظرات مطرح کنید و من به همه آنها پاسخ خواهم داد. خیلی ممنون که خواندید، و در قسمت بعدی شما را خواهم دید!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا