چرا GO امکان مقایسه عدد صحیح با رشته را فراهم می کند؟

در این مقاله ، ما بررسی خواهیم کرد که چرا GO امکان مقایسه نوع را فراهم می کند که در ابتدا ممکن است تعجب آور به نظر برسد ، به ویژه در مواردی مانند مقایسه یک عدد صحیح با یک رشته. ما مکانیسم های اساسی سیستم نوع Go و چگونگی انجام چنین مقایسه هایی را بدون ایجاد خطا یا وحشت توضیح خواهیم داد.
درک سیستم نوع GO
Go یک زبان تایپ شده است ، به این معنی که انواع متغیرها در زمان کامپایل شناخته می شوند. هنگامی که یک متغیر را تعریف می کنید ، نوع آن باید به صراحت اعلام شود یا استنباط شود و منجر به یک چارچوب ایمنی از نوع قوی شود. با این حال ، Go یک ویژگی منحصر به فرد را با any
تایپ کنید ، که می تواند یک مقدار از هر نوع داشته باشد. این انعطاف پذیری نقش مهمی در مثال ما دارد.
نقش any
نوع
در کد ارائه شده شما متغیر را می بینیم hello
به عنوان اعلام شده است var hello any = 2
بشر نوع any
در GO اساساً نام مستعار است interface{}
، اجازه می دهد تا نوع داده ، خواه یک عدد صحیح ، رشته یا حتی ساختار سفارشی باشد. این بدان معنی است که GO قادر به پذیرش انواع مختلف بدون ایجاد استثنا در هنگام اعلامیه است.
تجزیه و تحلیل مقایسه ها
حال بیایید مقایسه های انجام شده در قطعه کد شما را تجزیه و تحلیل کنیم:
println(hello != "") // true
println(hello == "2") // false
println(hello == 2) // true
-
hello != ""
(درست): اینجاhello
دارای یک عدد صحیح (2) است که برابر با یک رشته خالی نیست ، بنابراین این مقایسه با True ارزیابی می شود. -
hello == "2"
(نادرست): هنگام مقایسه عدد صحیح 2 با رشته “2” ، GO یک ادعای نوع را انجام می دهد ، با تشخیص اینکه این دو نوع ناسازگار هستند. از این رو ، بدون ایجاد وحشت ، نادرست برمی گردد ، رفتاری که با زبانهای تایپ شده دینامیکی متفاوت است. -
hello == 2
(درست): در این مثال ، هر دو طرف مقایسه از یک نوع اساسی (عدد صحیح) هستند و بنابراین ، GO اجازه می دهد تا این مقایسه بدون مشکل عبور کند.
چرا هیچ وحشت؟
شما در انتظار انتظار این که چنین مقایسه هایی ممکن است منجر به وحشت شود ، درست است. با این حال ، فلسفه Go متفاوت است. به جای اجرای قوانین مقایسه دقیق در این سطح ، یک نوع چک را انجام می دهد. اگر انواع ناسازگار باشند ، به جای وحشت ، به سادگی نتیجه می گیرند که مقایسه با بازگشت کاذب در صورت لزوم ، به طور منطقی معتبر است. این رفتار انعطاف پذیری کد را تقویت می کند و توسعه دهندگان را ترغیب می کند تا عملکردهای عمومی بیشتری را بدون شکستن منطق موجود بنویسند.
پیامدهای عملی مقایسه نوع
درک چگونگی برخورد با این مقایسه ها برای ایجاد برنامه های کارآمد و بدون خطا مهم است. هنگام استفاده any
، اطمینان حاصل کنید که از انواع مقایسه شده برای جلوگیری از سردرگمی احتمالی آگاه هستید. ادعاهای نوع ممکن است در صورت نیاز به انجام عملیات مربوط به انواع خاص ، همانطور که در مثال زیر نشان داده شده است ، رویکرد بهتری باشد:
value, ok := hello.(int)
if ok {
println(value + 1) // If hello is an int, this will safely execute.
} else {
println("hello is not an int")
}
پایان
به طور خلاصه ، توانایی Go در مقایسه یک عدد صحیح با یک رشته ، به ویژه هنگامی که عدد صحیح در داخل نگه داشته می شود any
نوع ، انعطاف پذیری زبان و نوع ایمنی را نشان می دهد. درک چگونگی مدیریت بررسی نوع ، شیوه های کد نویسی قوی تر را امکان پذیر می کند. با ادامه برنامه نویسی در GO ، با ادعاهای نوع خود آزمایش کنید و از بینش بیشتری در مورد سیستم نوع منحصر به فرد آن ، از نوع استفاده زیبا قدردانی کنید.
سوالات متداول
آیا می توانید به طور مستقیم انواع مختلف را در GO مقایسه کنید؟
نه ، GO اجازه مقایسه مستقیم بین انواع مانند عدد صحیح و یک رشته را نمی دهد. درعوض ، چک هایی را برای برابری و نابرابری انجام می دهد و تا زمانی که یکی از این نوع ها مطابقت نداشته باشد ، کاذب باز می گردد.
پیامدهای استفاده چیست any
در برو؟
با استفاده از any
می تواند به کد پیچیده تری منجر شود که در آن باید سازگاری نوع به طور مداوم بررسی شود ، بنابراین استفاده از آن به طور معقول ضروری است.
آیا مقایسه مقادیر انواع مختلف در GO یک روش معمول است؟
این یک عمل معمول نیست و به طور کلی دلسرد می شود زیرا می تواند به قصد نامشخص در کد منجر شود. بهتر است مقادیر را به یک نوع مشترک تبدیل کنید یا با ادعاهای نوع آنها را اداره کنید.