پرش به محتوا

سینتکس قندی

از ویکی‌پدیا، دانشنامهٔ آزاد
یک نمونه Syntactic sugar در تعریف متغیر در زبان go. در Syntactic sugar کامپایلر زبان گو، تایپ متغیر را استنتاج می‌کند
یک نمونه سینتکس قندی در تعریف متغیر در زبان گو. وقتی از این سینتکس قندی استفاده می‌شود، کامپایلر زبان گو، تایپ متغیر را استنتاج می‌کند.[۱]

در علوم کامپیوتر و طراحی کامپایلر، سینتکس قندی (به انگلیسی: Syntactic sugar) نوعی سینتکس یا نحو خاص است که به یک زبان برنامه‌نویسی اضافه می‌شود تا خواندن و نوشتن کد را راحت‌تر و سریع‌تر کند. این نحو اضافه شده با ساختاری واضح تر و مختصر، در کنار نحو اصلی، باعث به اصطلاح «شیرین تر» شدن آن زبان برنامه‌نویسی برای انسان می‌شود. معمولا سینتکس قندی روشی مختصرتر برای بیان یک دستور رایج و نسبتاً طولانی‌تر است. در واقع برنامه‌نویس می‌تواند هم سینتکس قندی و کوتاه‌تر و هم نحو اصلی و طولانی‌تر را استفاده کند، اما معمولاً از شکل کوتاه‌تر استفاده می‌شود که نوشتن و خواندن و فهمیدن آن برای همه سریع تر و راحت تر است.

مثلاً در خیلی از زبان‌های برنامه‌نویسی، روش‌های متفاوتی برای بررسی و ایجاد و تغییر عناصر یک آرایه، ارائه می‌شود که اگر بخواهیم کلی تر نگاه کنیم، واکشی مقدار یک عنصر می‌تواند یک تابع با دو آرگومان ورودی باشد: یکی خود آرایه و دیگری اندیس عنصر مدنظر در همان آرایه که می‌تواند به صورت get_array(Array, vector(i,j)) بیان شود. ولی بسیاری از زبان‌ها در کنار این، نحو دیگری مانند Array[i,j] هم ارائه می‌کنند که نمونه ای از سینتکس قندی است.

در عمل هم می‌توان سینتکس قندی را کاملاً از زبان حذف کرد و این کار هیچ تأثیری در عملکرد و قدرت زبان نمی‌گذارد، فقط حذف شدن سینتکس‌های قندی باعث طولانی‌تر شدن و ناخواناتر شدن کدها می‌شود، ولی توانایی‌ها، همان است.

بیشتر کامپایلرها و مفسرها، ساختار سینتکس‌های قندی را قبل از پردازش، به معادل‌های اصلی زبان تبدیل می‌کنند. به این فرایند گاهی اوقات به آن «قند زدایی» یا «desugaring» هم می‌گویند.

نمونه ها

[ویرایش]

به عنوان مثال در خیلی از زبان‌های برنامه‌نویسی به این صورت داریم:[۲]

int i = 2
i = i + 3

// Sugar
i += 3
i -= 3

//Sugar
i++ // i += 1    --===> i = i + 1
i-- // i -= 1    --===> i = i - 1

نمونه بالا بسیار رایج است و می‌شود آن را در خیلی از زبان های برنامه نویسی دید[۳]

در زبان سی شارپ، استنتاج نوع (Type Inference) از طریق کلمه کلیدی var هم نوعی سینتکس قندی است :

int y = 4 // Base Syntax
var x = 8 // Syntactic Sugar

همین فرایند در ++C با استفاده از کلمه کلیدی auto یک نمونه سینتکس قندی است :

int x = 16 // Base syntax
auto y = 8 // Syntactic Sugar

به عنوان مثال در جاوا اسکریپت تعرف یک شئ از طریق class که در ES6 اضافه شده است، به شکل زیر یک سینتکس قندی است:

class ClassA {
  constructor(foo, bar) {
    this.Foo = foo
    this.Bar = bar
  }
}

 const bux = new ClassA("Hello", "World")
 
// bux.Foo is "Hello"
// bux.Bar is "World"

نمونه پایین حالت واقعی همین مثال بالاست که از ES5 به قبل استفاده می‌شد[۴] :

const ClassA = function (foo, bar) {
this.Foo = Foo;
this.Bar = bar;
}
const bux = new ClassA("Hello", "World")
 
// bux.Foo is "Hello"
// bux.Bar is "World"

جاوا اسکریپت در واقع ارثبری را در میان اشیاء از طریق پروتوتایپ‌ها انجام می‌دهند . constructor تعریف شده در هر دو مثال، پروتوتایپ شئ تولید شده خواهد بود.[۴]

در پایتون، دکوراتورها یک سینتکس قندی هستند. در واقع حالت زیر حالت واقعی سینتکس زبان است:[۳]

# pre-decorators
def Y():
    pass
Y = X(Y)

که سینتکس قندی آن به این صورت است :

@X
def Y():
    pass

دستور زیر در زبان گو، نوعی سینتکس قندی است[۵] :

var m map[string]int = map[string]int{} //Base syntax
m := map[string]int{} //Syntactic sugar

بطور ویژه هرگونه استنتاج نوع در زبان های برنامه نویسی مثل سی شارپ، سی پلاس پلاس، تایپ اسکریپت، پایتون و... یک سینتکس قندی است.

همان‌طور که گفته شد، سینتکس قندی را می‌توان حذف کرد و هیچ تأثیری در کارایی زبان ندارد فقط کد را خواناتر و تمیزتر می‌کند.

اصطلاحات مربوط

[ویرایش]

سینتکس شور

[ویرایش]

این استعاره با ابداع اصطلاح سینتکس شور معروف شده است، که شاره آن به سینتکسی است که باعث سخت‌تر شدن کار و بدتر نوشته شدن کد است.

مثلاً در سی شارپ برای جلوگیری از مشکلاتی که احتمالاً بخاطر شباهت سینتکس دستور switch با C یا C++ بوجود می‌آید، برنامه‌نویس ملزم است که از عبارت break (یا عبارت‌های goto ،return یا throw) در انتهای هر case استفاده کند.

منابع

[ویرایش]
  1. "Everything You Always Wanted to Know About Type Inference - And a Little Bit More - The Go Programming Language". go.dev (به انگلیسی). Retrieved 2024-09-04.
  2. «Python is (mostly) made of syntactic sugar [LWN.net]». lwn.net. دریافت‌شده در ۲۰۲۴-۰۹-۰۳.
  3. ۳٫۰ ۳٫۱ «Python is (mostly) made of syntactic sugar [LWN.net]». lwn.net. دریافت‌شده در ۲۰۲۴-۰۹-۰۳. پارامتر |first2= بدون |last2= در Authors list وارد شده‌است (کمک)
  4. ۴٫۰ ۴٫۱ «Object.prototype.constructor - JavaScript | MDN». developer.mozilla.org (به انگلیسی). ۲۰۲۴-۰۷-۲۵. دریافت‌شده در ۲۰۲۴-۰۹-۰۳.
  5. "Everything You Always Wanted to Know About Type Inference - And a Little Bit More - The Go Programming Language". go.dev (به انگلیسی). Retrieved 2024-09-03.