- آیا هنگام مطالعه مستندات زبان برنامهنویسی Go (Golang) با **اصطلاحات ناآشنا** مواجه میشوید؟
- آیا حس میکنید درک برخی **مفاهیم اصلی Go** به دلیل لغات تخصصی دشوار است؟
- آیا نگران این هستید که عدم تسلط بر **واژگان کلیدی Go** سرعت یادگیری و پیشرفت شما را کاهش دهد؟
- آیا میخواهید با اعتماد به نفس بیشتری **کد Go** بخوانید و بنویسید؟
در این راهنما، ما **لغات زبان Go** را به سادگی و گام به گام برای شما تشریح میکنیم تا دیگر هرگز در مسیر یادگیری Go احساس سردرگمی نکنید. آمادهاید تا با اطمینان خاطر در دنیای Go قدم بگذارید؟
| لغت کلیدی (Keyword) | کاربرد اصلی (Main Usage) | توضیح مختصر (Brief Explanation) |
|---|---|---|
package
| سازماندهی کد (Code Organization) | مجموعهای از فایلهای سورس که کد مرتبط را گروهبندی میکند. |
func
| تعریف توابع (Function Definition) | کلمه کلیدی برای تعریف یک تابع یا متد. |
var
/
const
| تعریف متغیر / ثابت (Variable / Constant Definition) |
var
برای متغیرها (مقدار قابل تغییر)،
const
برای ثابتها (مقدار ثابت). |
go
| همروندی (Concurrency) | اجرای یک تابع به عنوان یک “گوروتین” (goroutine) جدید و سبکوزن. |
chan
| ارتباط بین گوروتینها (Goroutine Communication) | کانالی برای ارسال و دریافت مقادیر بین گوروتینها. |
چرا تسلط بر لغات Go برای شما حیاتی است؟
زبان برنامهنویسی Go، مانند هر زبان تخصصی دیگری، مجموعهای از اصطلاحات و لغات خاص خود را دارد. این واژگان نه تنها اجزای سازنده کد هستند، بلکه بیانگر مفاهیم اصلی و فلسفه طراحی این زبان نیز میباشند. درک دقیق این لغات به شما کمک میکند تا:
- کدهای موجود را با سرعت و دقت بیشتری بخوانید و درک کنید.
- با اطمینان و کارایی بیشتری کد Go بنویسید.
- در مستندات رسمی و جامعه Go، مشارکت فعالتری داشته باشید.
- از اشتباهات رایج که ناشی از سوءتفاهم لغوی هستند، جلوگیری کنید.
نگران نباشید اگر در ابتدا برخی از این مفاهیم کمی پیچیده به نظر میرسند. این طبیعی است و بسیاری از یادگیرندگان با آن دست و پنجه نرم میکنند. ما اینجا هستیم تا با سادهسازی و مثالهای عملی، این مسیر را برای شما هموار کنیم.
مفاهیم اساسی و لغات مربوطه (Fundamental Concepts & Vocabulary)
Package (بسته)
package
یک کلمه کلیدی است که مجموعهای از فایلهای سورس Go را که منطقاً به هم مرتبط هستند، سازماندهی میکند. این مکانیسم شبیه به ماژولها یا کتابخانهها در زبانهای دیگر است و به سازماندهی، قابلیت استفاده مجدد و جلوگیری از تداخل نامها کمک میکند.
-
package main: این یک بسته ویژه است که نشاندهنده یک برنامه اجرایی (executable program) است. تابعmain()در این بسته نقطه شروع اجرای برنامه میباشد. -
import: کلمه کلیدی برای وارد کردن (import) بستههای دیگر به کد فعلی شما.
مثال:
package main // بسته اصلی برنامه
import (
"fmt" // وارد کردن بسته fmt برای توابع قالببندی ورودی/خروجی
)
func main() {
fmt.Println("Hello, Go!")
}
- ✅ Correct: استفاده از
package mainبرای برنامههای اجرایی وimportبرای دسترسی به قابلیتهای بستههای دیگر. - ❌ Incorrect: فراموش کردن
package mainیاimportنکردن بستههای مورد نیاز که منجر به خطای کامپایل میشود.
Variables & Constants (متغیرها و ثابتها)
در Go،
var
برای تعریف متغیرها (مکانی برای ذخیره داده که مقدار آن میتواند در طول زمان تغییر کند) و
const
برای تعریف ثابتها (مقادیری که پس از تعریف قابل تغییر نیستند) استفاده میشود.
-
var name type = value: ساختار کلی تعریف متغیر. -
const name type = value: ساختار کلی تعریف ثابت. - Short Variable Declaration (اعلان متغیر کوتاه):
name := valueیک راه کوتاه برای تعریف و مقداردهی اولیه متغیرهاست که Go نوع آن را به صورت خودکار تشخیص میدهد. این فقط در داخل توابع قابل استفاده است.
مثال:
func main() {
var message string = "Welcome" // تعریف متغیر با نوع صریح
var count int // تعریف متغیر بدون مقدار اولیه (مقدار پیشفرض صفر)
count = 10 // مقداردهی به متغیر
isActive := true // اعلان متغیر کوتاه (نوع bool)
const PI float64 = 3.14159 // تعریف ثابت
// PI = 3.14 // ❌ Incorrect: نمیتوان مقدار یک ثابت را تغییر داد.
fmt.Println(message, count, isActive, PI)
}
Functions (توابع)
توابع در Go با کلمه کلیدی
func
تعریف میشوند. آنها بلوکهایی از کد هستند که وظایف خاصی را انجام میدهند و میتوانند ورودی (آرگومان) دریافت کرده و خروجی (مقادیر برگشتی) تولید کنند.
-
func functionName(parameters) (returnTypes) { ... }: ساختار کلی تعریف تابع.
مثال:
func add(a int, b int) int { // تابع add دو int میگیرد و یک int برمیگرداند
return a + b
}
func greet(name string) { // تابع greet یک string میگیرد و چیزی برنمیگرداند
fmt.Println("Hello,", name)
}
func main() {
sum := add(5, 3)
fmt.Println("Sum:", sum)
greet("Alice")
}
Concurrency (همروندی) – قلب Go
یکی از نقاط قوت اصلی Go، پشتیبانی داخلی و قدرتمند آن از همروندی (concurrency) است. این بخش شامل لغات بسیار مهمی است که برای هر توسعهدهنده Go ضروری است.
Goroutine (گوروتین)
یک
goroutine
یک تابع یا متد است که به صورت همزمان با سایر توابع یا متدها در حال اجراست. آنها معادل سبکوزن (lightweight) نخها (threads) هستند که مدیریت آنها بسیار سادهتر و کمهزینهتر است.
-
go functionCall(): کلمه کلیدیgoبرای راهاندازی یک گوروتین جدید استفاده میشود.
مثال:
import (
"fmt"
"time"
)
func sayHello() {
time.Sleep(1 * time.Second) // شبیهسازی کاری که زمان میبرد
fmt.Println("Hello from Goroutine!")
}
func main() {
go sayHello() // اجرای sayHello در یک گوروتین جدید
fmt.Println("Hello from Main!")
time.Sleep(2 * time.Second) // منتظر میمانیم تا گوروتین فرصت اجرا پیدا کند
}
- ✅ Correct: استفاده از
goبرای اجرای عملیاتهای مستقل در پسزمینه بدون بلاک کردن اجرای اصلی. - ❌ Incorrect: فراموش کردن
time.Sleepیا مکانیزمهای همگامسازی، که میتواند باعث شود برنامه اصلی قبل از اتمام گوروتینها خاتمه یابد.
Channel (کانال)
channel
ها وسیله اصلی ارتباط بین
goroutine
ها هستند. آنها یک مسیر امن برای ارسال و دریافت مقادیر بین دو یا چند گوروتین فراهم میکنند و به جلوگیری از مشکلات همروندی مانند Race Condition کمک میکنند.
-
make(chan type): برای ایجاد یک کانال استفاده میشود. -
ch <- value: ارسالvalueبه کانالch. -
value := <-ch: دریافتvalueاز کانالch. -
close(ch): بستن یک کانال (نشان میدهد که دیگر هیچ مقداری ارسال نخواهد شد). -
buffered channel: کانالی که میتواند تعداد محدودی از مقادیر را قبل از بلاک شدن ذخیره کند. (make(chan type, capacity))
مثال:
import "fmt"
func worker(done chan bool) {
fmt.Println("Worker started...")
// Simulate some work
fmt.Println("Worker finished.")
done <- true // ارسال سیگنال اتمام کار به کانال
}
func main() {
done := make(chan bool) // ایجاد یک کانال بولین
go worker(done) // اجرای worker در یک گوروتین جدید
<-done // منتظر دریافت سیگنال از کانال میمانیم تا worker کارش تمام شود
fmt.Println("Main received signal, exiting.")
}
Error Handling (مدیریت خطا)
مدیریت خطا در Go با استفاده از بازگرداندن مقادیر
error
به عنوان آخرین مقدار برگشتی از یک تابع انجام میشود.
-
error: یک interface داخلی Go که برای نشان دادن خطاها استفاده میشود. -
nil: در Go،nilنشاندهنده نبود مقدار است (مثلاً برای اشارهگرها، slices، maps، channels، functions و interfaces). هنگام بازگرداندنerror، اگر خطایی رخ نداده باشد،nilبرگردانده میشود. -
defer: کلمه کلیدیdeferاجرای یک تابع را تا زمانی که تابع احاطهکننده (enclosing function) برگردد به تعویق میاندازد. این برای تضمین آزادسازی منابع (مثل بستن فایلها) حتی در صورت بروز خطا بسیار مفید است.
مثال:
import (
"errors"
"fmt"
)
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("cannot divide by zero") // بازگرداندن یک خطا
}
return a / b, nil // بازگرداندن nil اگر خطایی نیست
}
func main() {
result, err := divide(10, 2)
if err != nil { // بررسی وجود خطا
fmt.Println("Error:", err)
} else {
fmt.Println("Result:", result)
}
// مثال defer
file, err := openFile("example.txt") // فرض کنید تابعی برای باز کردن فایل است
if err != nil {
fmt.Println(err)
return
}
defer closeFile(file) // تضمین میکند که فایل در پایان تابع بسته شود
// ادامه کار با فایل...
fmt.Println("File processed.")
}
Types & Structs (انواع و ساختارها)
Go یک زبان Static Type است، به این معنی که انواع دادهها در زمان کامپایل مشخص میشوند.
struct
ها راهی برای ایجاد انواع دادههای مرکب سفارشی هستند.
-
type: کلمه کلیدی برای تعریف انواع جدید. -
struct: یک نوع داده مرکب (composite data type) که مجموعهای از فیلدها (fields) با انواع مختلف را گروهبندی میکند. -
interface: یک مجموعه از امضای متدها (method signatures) که رفتارها را تعریف میکند. هر نوعی که تمام متدهای یک اینترفیس را پیادهسازی کند، به طور ضمنی آن اینترفیس را نیز پیادهسازی کرده است.
مثال:
import "fmt"
type Person struct { // تعریف یک struct به نام Person
Name string
Age int
}
// تعریف یک interface
type Greeter interface {
SayHello() string
}
// متد برای struct Person که interface Greeter را پیادهسازی میکند
func (p Person) SayHello() string {
return fmt.Sprintf("Hi, my name is %s and I am %d years old.", p.Name, p.Age)
}
func main() {
p := Person{Name: "Alireza", Age: 30} // ایجاد یک نمونه از Person
fmt.Println(p.SayHello())
var g Greeter = p // یک Person میتواند به عنوان Greeter استفاده شود
fmt.Println(g.SayHello())
}
Common Myths & Mistakes (باورهای غلط و اشتباهات رایج)
اشتباه در استفاده از
nil
- ❌ Incorrect: فرض کردن که یک slice با طول صفر همان
nilاست. یک slice تهی ([]int{}) با یک slicenilمتفاوت است، حتی اگر هر دو طول صفر داشته باشند. اینترفیسnilهم با مقدارnilبرای نوع خاص فرق دارد. - ✅ Correct: درک تفاوت دقیق بین یک slice تهی و
nilslice و همچنین زمانی که یک اینترفیسnilدر نظر گرفته میشود (زمانی که هم مقدار و هم نوع زیرین آنnilباشد).
بلاک شدن Goroutineها یا فراموش کردن بستن کانالها
- ❌ Incorrect: ارسال بیوقفه به یک کانال بدون بافر و بدون دریافتکننده، یا ارسال به کانال بسته شده. این میتواند منجر به deadlock یا panic شود.
- ✅ Correct: طراحی دقیق جریان داده بین گوروتینها و استفاده صحیح از کانالهای بافر شده یا بدون بافر. همیشه به یاد داشته باشید که فقط فرستنده باید کانال را ببندد.
نادیده گرفتن مدیریت خطا
- ❌ Incorrect: بررسی نکردن مقدار
errبرگشتی از توابع و ادامه اجرای برنامه. - ✅ Correct: همیشه مقدار
errرا بررسی کنید و خطاهای احتمالی را به درستی مدیریت کنید. این به پایداری و قابلیت اطمینان کد شما کمک میکند.
Common FAQ (سوالات متداول)
1. تفاوت اصلی بین
goroutine
و
thread
چیست؟
goroutine
ها بسیار سبکوزنتر از
thread
ها هستند. Go runtime مدیریت زمانبندی (scheduling)
goroutine
ها را بر روی
thread
های سیستمعامل انجام میدهد و این کار را بسیار کارآمدتر از مدیریت مستقیم
thread
ها توسط برنامهنویس یا سیستمعامل انجام میدهد. هزاران
goroutine
میتوانند بر روی تعداد کمی از
thread
های سیستمعامل اجرا شوند.
2. آیا باید همیشه کانالها را
close
کنم؟
خیر، همیشه نیازی به بستن کانالها نیست. بستن کانال فقط زمانی لازم است که میخواهید به دریافتکنندهها سیگنال دهید که دیگر هیچ مقداری از این کانال ارسال نخواهد شد. در بسیاری از موارد (به خصوص برای کانالهایی که فقط به صورت لوکال در یک تابع استفاده میشوند)، نیازی به بستن صریح نیست. اما اگر کانال بین گوروتینهای مختلف به اشتراک گذاشته شده و نیاز به سیگنال اتمام کار دارید، بستن آن مهم است.
3. چرا Go از
try-catch
برای مدیریت خطا استفاده نمیکند؟
Go فلسفه متفاوتی برای مدیریت خطا دارد. به جای
try-catch
(که میتواند flow کنترل برنامه را پیچیده کند)، Go از بازگرداندن صریح مقدار
error
به عنوان آخرین مقدار برگشتی از توابع استفاده میکند. این رویکرد به برنامهنویسان کمک میکند تا خطاها را به صورت محلی و صریح مدیریت کنند و خوانایی کد را افزایش میدهد. تمرکز بر این است که خطاها بخشی از جریان عادی برنامه باشند و نه استثنائات نادر.
Conclusion (نتیجهگیری)
تبریک میگوییم! اکنون با مجموعهای قوی از **لغات ضروری زبان Go** آشنا شدهاید که پایه و اساس درک عمیقتر این زبان برنامهنویسی هستند. به یاد داشته باشید که یادگیری یک زبان برنامهنویسی، یک سفر است و تسلط بر واژگان تنها قدم اول است.
از این واژگان و مفاهیم در پروژههای خود استفاده کنید، کدهای دیگران را بخوانید و هرگز از پرسیدن سوال نترسید. هر کلمه جدیدی که یاد میگیرید، دریچهای جدید به درک بهتر و تواناییهای بیشتر در Go میگشاید. به خودتان افتخار کنید و با انگیزه به مسیر خود ادامه دهید!




سلام! ممنون بابت مقاله خوبتون. یک سوال در مورد کلمه ‘package’ دارم. در انگلیسی عمومی، ‘package’ بیشتر به معنی بسته یا جعبه به کار میره. آیا مفهوم ‘Code Organization’ و گروه بندی فایلها از همون ریشه میاد یا اینجا یک اصطلاح تخصصی کاملاً جدیده؟
سلام سارا خانم! سوال بسیار خوبی پرسیدید. بله، مفهوم ‘package’ در برنامهنویسی، ریشهای مشترک با معنی عمومی ‘بسته’ یا ‘مجموعه’ دارد. در واقع، در هر دو مورد به مجموعهای از اجزا (چه فیزیکی و چه فایلهای کد) اشاره دارد که برای یک هدف خاص کنار هم قرار گرفتهاند. این نشان میدهد که چطور زبان انگلیسی مفاهیم موجود را برای اصطلاحات جدید گسترش میدهد. در برنامهنویسی Go، ‘package’ دقیقاً همان کار سازماندهی و بستهبندی کد مرتبط را انجام میدهد.
مقاله خیلی مفید بود، خسته نباشید. من همیشه در تلفظ ‘goroutine’ مشکل دارم. میتونید راهنمایی کنید که تلفظ صحیحش چطوریه؟
سلام امیر عزیز! بله حتماً. تلفظ صحیح ‘goroutine’ به صورت /ɡoʊˈruːtiːn/ است. اگر بخواهیم سادهسازی کنیم، چیزی شبیه به ‘گُو-روتین’ (با تاکید روی ‘رو’) شنیده میشود. تمرین کنید و از شنیدن تلفظ آن در دیکشنریهای آنلاین یا ویدئوهای آموزشی استفاده کنید تا کاملاً مسلط شوید.
ممنون از توضیحات عالی و سادهتون! واقعا برای یادگیری Go لازم بود. مخصوصا درک ‘Concurrency’ و ‘Goroutine Communication’ با این واژگان خیلی راحتتر میشه.
آیا ‘func’ در Go، یک شکل مختصر یا عامیانه (informal) از ‘function’ در انگلیسی عمومی محسوب میشه؟ یا در محیطهای تخصصی برنامهنویسی کاملاً پذیرفته شده و استاندارده؟
سلام زهرا خانم! ‘func’ در زبان Go کاملاً یک کلمه کلیدی استاندارد و رسمی است و به هیچ وجه یک شکل عامیانه یا غیررسمی محسوب نمیشود. بسیاری از زبانهای برنامهنویسی برای سادگی و کارایی، کلمات کلیدی خود را کوتاه میکنند. مثلاً ‘var’ برای ‘variable’ یا ‘const’ برای ‘constant’. این رویه در مستندات رسمی و جامعه برنامهنویسی Go کاملاً پذیرفته شده است.
در مورد ‘chan’، آیا این کلمه مخفف ‘channel’ هست؟ و آیا ‘channel’ در اینجا فقط یک اصطلاح تخصصی Go است یا در انگلیسی عمومی هم برای ارتباطات این چنینی استفاده میشود؟
بله علی جان، ‘chan’ دقیقاً مخفف ‘channel’ است. کلمه ‘channel’ در انگلیسی عمومی نیز به معنی ‘کانال’ یا ‘مسیر ارتباطی’ کاربرد وسیعی دارد، مثلاً ‘communication channel’ (کانال ارتباطی) یا ‘TV channel’ (کانال تلویزیون). در Go، این کلمه به زیبایی مفهوم یک ‘کانال’ برای ارسال و دریافت اطلاعات بین بخشهای مختلف برنامه (goroutines) را منتقل میکند، که کاملاً با معنی عمومی آن همراستا است.
توضیح ‘var’ و ‘const’ خیلی واضح بود. میخواستم بدونم در یک جمله انگلیسی معمولی، برای اشاره به چیزی که مقدارش ثابت یا متغیر هست، از ‘variable value’ یا ‘constant value’ استفاده میکنیم یا اصطلاحات دیگری رایجتره؟
سوال خوبی پرسیدید مریم خانم. بله، اصطلاحات ‘variable value’ و ‘constant value’ در انگلیسی عمومی و فنی کاملاً رایج و صحیح هستند، به خصوص وقتی در مورد مقادیر عددی یا دادهای صحبت میکنیم. برای مثال، میتوانید بگویید ‘The temperature is a variable value’ (دما یک مقدار متغیر است) یا ‘Pi is a constant value’ (عدد پی یک مقدار ثابت است). همچنین از ‘fixed value’ (مقدار ثابت) هم به جای ‘constant value’ استفاده میشود.
سلام و خسته نباشید! فکر میکنم یکی از اصطلاحات مهم دیگه در Go، ‘interface’ هست. اگه بشه یه توضیح مختصر انگلیسی و فارسیش رو هم به این لیست اضافه کنید خیلی عالی میشه. از نظر انگلیسی، تفاوت ‘interface’ با ‘abstract class’ چیه؟
سلام رضا جان، پیشنهاد بسیار خوبیه! حتماً در آپدیتهای بعدی به ‘interface’ و سایر اصطلاحات مهم Go خواهیم پرداخت. در مورد سوالتان، ‘interface’ در برنامهنویسی (خصوصاً در زبانهایی مثل Go یا Java) به معنی مجموعهای از متدهاست که یک نوع (type) باید آنها را پیادهسازی کند. در انگلیسی عمومی، ‘interface’ به معنی ‘رابط’ یا ‘سطح مشترک’ است، مثلاً ‘user interface’ (رابط کاربری). تفاوت اصلی آن با ‘abstract class’ (که بیشتر در زبانهای شیءگرا مثل Java یا C++ دیده میشود) در این است که ‘interface’ فقط ‘چه کاری انجام شود’ را مشخص میکند و هیچ پیادهسازیای ندارد، در حالی که ‘abstract class’ میتواند هم متدهای پیادهسازی نشده (abstract methods) و هم متدهای پیادهسازی شده داشته باشد و حتی فیلد (state) هم نگه دارد. در Go، ‘interface’ یک مفهوم بسیار قدرتمند برای Polymorphism است.
خیلی ممنون از مقاله آموزندهتون. در مورد کلمه کلیدی ‘go’ برای ‘Concurrency’، آیا این کاربرد تخصصی ‘go’ به نوعی با معنی عمومی ‘رفتن’ یا ‘شروع کردن’ در ارتباطه؟ یعنی انگار میگیم ‘این کار رو برو انجام بده’؟
سلام حسین جان! بله، تحلیل شما بسیار دقیق است. ارتباط معنایی عمیقی بین ‘go’ در نقش کلمه کلیدی برای همروندی و معنی عمومی آن در انگلیسی وجود دارد. وقتی میگوییم ‘go foo()’ در Go، در واقع داریم به سیستم میگوییم ‘این تابع foo را به صورت مستقل و همزمان (برو) اجرا کن’. این مثال خوبی از چگونگی استفاده از کلمات رایج انگلیسی برای ایجاد مفاهیم جدید و شهودی در حوزه فنی است.
ممنون از مطلب جامع و مفیدتون. جمع ‘goroutine’ چیه؟ آیا ‘goroutines’ میشه یا شکل خاصی داره؟
سلام کیانا خانم! سوال خوبی پرسیدید. بله، جمع ‘goroutine’ دقیقاً ‘goroutines’ است، با اضافه کردن ‘s’ به آخر کلمه. این قاعده برای اکثر اسامی در زبان انگلیسی صدق میکند و ‘goroutine’ هم از همین الگو پیروی میکند. مثلاً: ‘One goroutine, many goroutines’.
واقعاً تبریک میگم بابت این محتوای عالی. اینکه چطور ‘Concurrency’ و ‘Goroutine Communication’ رو با لغات کلیدی Go توضیح دادید، خیلی کمک میکنه تا مفاهیم رو بهتر درک کنیم.
در بخش جدول، ‘Main Usage’ به کار رفته. آیا میتونستیم به جاش از ‘Primary Use’ استفاده کنیم؟ از نظر انگلیسی، این دو تا اصطلاح کاملاً به جای هم استفاده میشن یا تفاوتهای ظریفی دارند؟
سلام شیرین خانم! بله، ‘Main Usage’ و ‘Primary Use’ هر دو کاملاً صحیح و قابل تعویض هستند و در اکثر موارد به جای یکدیگر به کار میروند، به خصوص در متون فنی یا آموزشی که به کاربرد اصلی چیزی اشاره میکنند. هر دو به معنای ‘کاربرد اصلی’ یا ‘هدف اصلی’ هستند و تفاوت ظریفی بینشان وجود ندارد. انتخاب هر کدام بیشتر به سلیقه نگارنده برمیگردد.
من کلمه ‘channel’ رو در حوزههای دیگه تکنولوژی هم شنیدم، مثلاً ‘data channel’. آیا معنی کلی ‘channel’ در انگلیسی برای انواع انتقال اطلاعات یکسانه؟
بله سعید جان، کاملاً درست است. معنی کلی ‘channel’ در انگلیسی، به معنای ‘مسیر’ یا ‘مجرایی’ است که اطلاعات، سیگنالها، یا حتی مایعات از طریق آن منتقل میشوند. چه در ‘data channel’ برای انتقال داده، چه در ‘communication channel’ برای ارتباطات انسانی، و چه در ‘chan’ در Go برای انتقال مقادیر بین goroutineها، مفهوم اصلی یکسان است: یک مسیر تعریف شده برای جریان یافتن چیزی. این یکی از زیباییهای زبان انگلیسی است که یک کلمه میتواند با حفظ هسته معنایی خود، در زمینههای مختلف به کار رود.
به جای ‘Brief Explanation’ میشه ‘Short Description’ هم گفت؟ کدومش در انگلیسی رایجتره برای یک توضیح مختصر؟
سلام الهه خانم! هم ‘Brief Explanation’ و هم ‘Short Description’ هر دو کاملاً صحیح و رایج هستند و به یک معنی (توضیح کوتاه) به کار میروند. در متون آموزشی و فنی، هر دو به کرات استفاده میشوند و انتخاب بین آنها بیشتر به سبک نوشتاری نویسنده بستگی دارد. هیچکدام بر دیگری برتری معناداری ندارد.
خیلی وقتها در جملات انگلیسی، بین ‘variable’ و ‘changeable’ یا ‘constant’ و ‘fixed’ قاطی میکنم. آیا این اصطلاحات کاملاً به جای هم به کار میرن یا کاربرد متفاوتی دارن؟
سلام داوود عزیز! سوال بسیار مهمی است. کلمات ‘variable’ و ‘changeable’ در بسیاری موارد میتوانند مترادف باشند، اما ‘variable’ بیشتر در زمینههای علمی، ریاضی، یا برنامهنویسی به یک کمیت یا مقداری که میتواند تغییر کند اشاره دارد. ‘Changeable’ بیشتر یک صفت عمومی است برای هر چیزی که قابلیت تغییر دارد (مثل ‘changeable weather’). به همین ترتیب، ‘constant’ و ‘fixed’ نیز در اکثر مواقع مترادف هستند، اما ‘constant’ اغلب به چیزی اشاره دارد که در طول زمان ثابت میماند (مثل ‘constant speed’ یا ‘constant value’ در ریاضیات)، در حالی که ‘fixed’ میتواند به معنای ‘تعیین شده’ یا ‘غیرقابل جابجایی’ هم باشد (مثلاً ‘fixed price’ یا ‘fixed object’). در برنامهنویسی، ‘variable’ و ‘constant’ اصطلاحات دقیق و تخصصی هستند و به معنای ‘متغیر’ و ‘ثابت’ به کار میروند.
این مقاله واقعا عالیه! اینکه لغات تخصصی انگلیسی رو اینقدر شفاف و ساده توضیح میدید، یادگیری رو خیلی راحتتر میکنه. ممنون از زحماتتون.
در ‘Code Organization’، کلمه ‘organization’ اینجا اسم هست یا فعل؟ گاهی در تشخیص noun از verb در انگلیسی دچار مشکل میشم. چطور میشه تشخیص داد؟
سلام آرش جان! سوالی که پرسیدید یک نکته گرامری مهم در انگلیسی است. در عبارت ‘Code Organization’، کلمه ‘organization’ یک اسم (noun) است. این را میتوان از چند طریق تشخیص داد: اولاً، اغلب وقتی کلمهای با ‘tion-‘ یا ‘sion-‘ تمام میشود، اسم است (مثل ‘information’, ‘decision’). ثانیاً، در این عبارت، ‘Code’ نقش متمم اسم (مثل صفت) را برای ‘Organization’ بازی میکند و مشخص میکند چه نوع سازماندهیای مد نظر است. اگر فعل بود، معمولاً به شکل ‘to organize code’ یا ‘organizing code’ میآمد. پس ‘Code Organization’ به معنای ‘سازماندهی کد’ است که در اینجا یک مفهوم اسمی است.
ممنون از مقاله عالی. فکر میکنم تفاوت ‘function’ و ‘method’ هم در انگلیسی میتونه برای خیلیها گیجکننده باشه، مخصوصا در برنامهنویسی. اگه میشه این رو هم در یک مطلب جداگانه توضیح بدید.
سلام یاسمن خانم! پیشنهاد شما عالی است و حتماً به آن خواهیم پرداخت. به طور خلاصه، در زبان انگلیسی و در زمینه برنامهنویسی، ‘function’ (تابع) یک بلوک کد مستقل است که میتواند فراخوانی شود. اما ‘method’ (متد) یک ‘function’ است که به یک شیء (object) یا ساختار (struct) خاص تعلق دارد و روی دادههای آن شیء عمل میکند. این تمایز در زبانهای برنامهنویسی شیءگرا و حتی در Go (که متدها را روی typeها تعریف میکند) بسیار مهم است. برای مثال، در Go، وقتی ‘func (t MyType) doSomething()’ را مینویسید، ‘doSomething’ یک متد برای نوع ‘MyType’ است.