💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ عرفان کاظمی
متوجه نشدن & و مواقع استفاده از آن
Reza Mobaraki حل شده توسط Reza Mobaraki

سلام ، یه سوال داشتم 

این قسمت کد رو متوجه نشدم 

fmt.Scanln(&salary)

چرا برای مقدار دهی لازمه که آدرس خونه اون متغیر رو بدیم !

اما وقتی میخواییم توی شرط‌ها مانند زیر استفاده کنیم ، دیگه به خونه متغیر کاری نداریم ؟!

if salary > minSalary {
}

 

درود وقت بخیر 

در Go، `fmt.Scanln` انتظار داره که مقدار ورودی را به عنوان یک "مقدار مرجع" (reference) بگیره تا بتونه مقداری که توسط کاربر وارد میشه رو به متغیر مناسب اختصاص بده. به این دلیل است که شما باید آدرس `&` از متغیر `salary` را به `Scanln` بدید، تا `Scanln` بتونه مقدار ورودی را به متغیر مربوطه رو اختصاص بده.

اما وقتی که شما از `salary` در یک شرط استفاده میکنید مثل `if salary > minSalary`، در اینجا شما از مقدار خود `salary` استفاده کردین و نیازی به آدرس متغیر یا مرجع آن نیست. شما به صورت مستقیم از مقدار `salary` استفاده میکنین تا مقایسه رو انجام بدید.

package main
import (
	"fmt"
)
func main() {
	var salary int
	// دریافت ورودی از کاربر و اختصاص به متغیر salary
	fmt.Println("Please enter your salary:")
	fmt.Scanln(&salary)
	// استفاده از مقدار متغیر salary در یک شرط
	minSalary := 1000
	if salary > minSalary {
		fmt.Println("Your salary is greater than the minimum salary.")
	} else {
		fmt.Println("Your salary is not greater than the minimum salary.")
	}
}

 اینجا، ورودی از کاربر گرفته میشه و به salary اختصاص داده میشه. بعدش مقدار minSalary را مقایسه میکنه و بسته به اینکه salary بیشتر یا کمتر از minSalary هست، پیام مناسب چاپ میشه.

وقتی fmt.Scanln(&salary) را فراخوانی میکنین، شما به Scanln آدرس متغیر salary را میدید. این کار باعث میشه Scanln بتونه مقداری که توسط کاربر وارد میشه رو در مکان مناسب حافظه به salary اختصاص بده.

از طرف دیگر، وقتی که در یک شرط مانند if salary > minSalary از salary استفاده میکنین، شما به طور مستقیم از مقدار salary استفاده کردید. در نتیجه، شما دیگه نیازی به آدرس یا مرجع salary ندارید چون از مقدار واقعیش برای انجام عملیات مقایسه استفاده شده.


موفق باشید
 

بهترین پاسخ
Reza Mobaraki ۰۴ دی ۱۴۰۲، ۱۸:۱۳

.

. ۱۶ بهمن ۱۴۰۲، ۱۷:۳۷

.

علی کیانپور ۱۷ بهمن ۱۴۰۲، ۰۶:۰۸