مقادیر «منطقی» در Go با نوع منطقی از پیش تعریفشدهی bool نمایش داده میشوند که مقادیر آن میتواند true یا false باشد.
این یک نوع تعریفشده است.
var closed bool // boolean variable 'closed' implicitly initialized with 'false'
speeding := true // boolean variable 'speeding' initialized with 'true'
hasError := false // boolean variable 'hasError' initialized with 'false'
Go از سه عملگر منطقی پشتیبانی میکند که میتوانند عبارتها را به مقادیر منطقی تبدیل کنند و true یا false برگردانند.
| عملگر | معنی |
|---|---|
&& (و) |
اگر هر دو گزاره «درست» باشند، نتیجه «درست» است. |
|| (یا) |
اگر حداقل یکی از گزارهها «درست» باشد، نتیجه «درست» است. |
! (نقیض) |
فقط اگر گزاره «غلط» باشد، نتیجه «درست» است. |
در این تمرین، منطق ماجراجویی یک بازی نقشآفرینی جدید را پیادهسازی میکنید که دوستتان در حال توسعهی آن است. شخصیت اصلی بازی آنالین است؛ دختری شجاع با یک سگ خانگی سرسخت و وفادار. متأسفانه فاجعهای رخ میدهد: بهترین دوستش هنگام جستوجوی توتها در جنگل دزدیده شده است. آنالین تلاش میکند بهترین دوستش را پیدا کند و آزادش کند و در این ماجراجویی، به دلخواه سگش را هم با خود میبرد.
پس از مدتی که رد بهترین دوستش را دنبال میکند، اردوگاهی را مییابد که دوستش در آن زندانی است. معلوم میشود دو آدمربا وجود دارند: یک شوالیهی قدرتمند و یک کماندار حیلهگر.
آنالین پس از یافتن آدمرباها در نظر میگیرد که کدامیک از کارهای زیر را میتواند انجام دهد:
چهار کار پیش رو دارید: پیادهسازی منطقی که بر اساس وضعیت سه شخصیت یافتشده در جنگل و اینکه سگ خانگی آنالین همراه او هست یا نه، مشخص کند کارهای بالا در دسترس هستند یا نه.
تابع CanFastAttack() را تعریف کنید که یک «مقدار منطقی» میگیرد و نشان میدهد آیا شوالیه بیدار است یا نه.
این تابع اگر بر اساس وضعیت شوالیه بتوان حملهی سریع انجام داد، true برمیگرداند.
در غیر این صورت، false برمیگرداند:
var knightIsAwake = true
fmt.Println(CanFastAttack(knightIsAwake))
// Output: false
تابع CanSpy() را تعریف کنید که سه مقدار منطقی میگیرد و به ترتیب نشان میدهد آیا شوالیه، کماندار و زندانی بیدار هستند یا نه.
این تابع اگر بر اساس وضعیت سه شخصیت بتوان از گروه جاسوسی کرد، true برمیگرداند.
در غیر این صورت، false برمیگرداند:
var knightIsAwake = false
var archerIsAwake = true
var prisonerIsAwake = false
fmt.Println(CanSpy(knightIsAwake, archerIsAwake, prisonerIsAwake))
// Output: true
تابع CanSignalPrisoner() را تعریف کنید که دو مقدار منطقی میگیرد و به ترتیب نشان میدهد آیا کماندار و زندانی بیدار هستند یا نه.
این تابع اگر بر اساس وضعیت دو شخصیت بتوان به زندانی علامت داد، true برمیگرداند.
در غیر این صورت، false برمیگرداند:
var archerIsAwake = false
var prisonerIsAwake = true
fmt.Println(CanSignalPrisoner(archerIsAwake, prisonerIsAwake))
// Output: true
تابع CanFreePrisoner() را تعریف کنید که چهار مقدار منطقی میگیرد.
سه پارامتر اول به ترتیب نشان میدهند آیا شوالیه، کماندار و زندانی بیدار هستند یا نه.
پارامتر آخر نشان میدهد آیا سگ خانگی آنالین همراه او هست یا نه.
این تابع اگر بر اساس وضعیت سه شخصیت و حضور سگ خانگی آنالین بتوان زندانی را آزاد کرد، true برمیگرداند.
در غیر این صورت، false برمیگرداند:
var knightIsAwake = false
var archerIsAwake = true
var prisonerIsAwake = false
var petDogIsPresent = false
fmt.Println(CanFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent))
// Output: false