کولا (زبان برنامه نویسی)

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

کولا زبان برنامه نویسی شبیه به جاوا و سی شارپ با برخی از ویژگی‌های سطح بالاتر از پرل و روبی از جمله عبارات منظم طبقه اول است. می‌تواند توسطMicrosoft .NET CLR یا Parrot virtual machine کامپایل شود کولا یک زبان کامپایل شده با بررسی نوع ایستاست، اما طراح برخی از ویژگی های عام تر زبان های اسکریپت نویسی مانند پرل و روبی را با آن آمیخته است. بر طبق آنچه نویسنده بیان کرده است، بعد از سال ها استفاده از جاوا و سی پلاس پلاس برای پروژه های بزرگ و پرل برای پروژه های کوچک تا متوسط به نظر می رسید هیچ زبانی فاصله بین این دو را پر نخواهد کرد. کولا بیشتر ترکیبی از چند زبان قدرتمند با در نظر گرفتن اصول کلیدی زیر است تا طراحی یک زبان جدید: با داشتن براکت ها و سمی کالن در کولا، برنامه نویسان سی پلاس پلاس، جاوا و پرل باید راحت باشند و فضای سفید هیچ تاثیری روی نحو ندارد. کنوانسیون بر کد - مطالبی که قرار دادیند نیاز به اعلان صریح ندارند.

نسبت بالای سیگنال بر نویز[ویرایش]

از قرارداد کد برای کاهش در هم ریختگی کلمه کلیدی و افزایش خوانایی استفاده کنید. بیان یک ایده و اجرای ان را با هم اشتباه نکنید. جاوا و C# این را به صورت یک انتخاب ضعیف از حوزه پیش فرض دسترسی به زمینه هاو توابع نمایش می دهند که تضمین می کنند بهره وری فایل های منبع با حوزه دسترسی کلمات کلیدی غربال می شود.برای مثال استفاده از کلمه کلیدی publicبر اساس آنالیز کد منبع نمونه های واقعی، بر گرامر C#و جاوا غلبه می کند. کولا پیش فرض های متفاوتی را ایجاد می کند، به علاوه از سبک بخش های حوزه دسترسی C++ که نباید به ازای هر عضو یک کلمه کلیدی داشت پشتیبانی می کند.

. رشته ها و پردازش متن اولین اولویت هستند-- بیشتر برنامه ها شامل رشته ها و دستکاری متن می باشند. حمایت از عبارت منظم به طرز چشمگیری قدرت زبان را افزایش می دهد، اما نحو داخلی برای عبارات منظم خوانایی را افزایش می دهد و ترکیب این دو عملکرد برنامه را ارتقا می دهد. در شرایط مقداردهی و یا استفاده از یک متغیرغیر رشته ای دررشته، و یا متون مبهم، کولا در صورت امکان متغیر را به رشته تبدیل می کند، به جای آن که باعث یک تبدیل نوع خارجی شود. سوئیچ کامپایلری می تواند حالت خطا یا هشدار در مورد تبدیل نوع خودکار را فعال کند.

برنامه Hello World! به سه روش زیر نوشته می شود:

// C/Perl-style without classes
// Cola package/global methods are static by default, void by default
string mesg = "Hello world\n";
main() {
   print(mesg);
}
// Cola OO-style
// classes, methods and constructors public by default, fields private by default
class Hello {
   string mesg;
   new() { mesg = "Hello world\n"; }
   static void main() {
     print(mesg);
   }
}
// Cola OO-style, explicit scope access (C++ style)
// classes, methods and constructors public by default, fields private by default
class Hello {
   protected:
      string mesg;
   public:
      new() { mesg = "Hello world\n"; }
      static void main() {
         print(mesg);
      }
}

به جای استفاده از سازنده های اسمی متناظر با نام کلاس در زبان های سنتی C++ / جاوا / C#، کولا از new , delete به عنوان سازنده و مخرب به منظور ساده سازی ظاهر کد و ارتقای عملکرد چینش و الصاق استفاده می کند.

کولا هر دو حالت پیشوندی و پسوندی و هر دو حالت ایستا و پویا برای تعریف ابعاد یک آرایه را ارایه می کند. این یک امکان کاربردی برای برنامه نویس است که به راحتی از پیشینه برنامه نویسی خود استفاده کند و آرایه های ایستا را کاهش دهد.

int[] arr = new int[12];    // prefix, dynamic
int arr[] = new int[12];    // postfix, dynamic
int[12] arr;                // prefix, static auto-allocated
int arr[12];                // postfix, static auto-allocated

یک مثال از پشتیبانی کولا از عبارات منظم و تطابق در زیر آمده است. ابتدا یک مثال معمولی که ظاهر Perl را باز تولید می کند.

// implicit match backreference
if(mesg =~ /(yes)(madam)/) {
   print("In string: " + $0);
   print("we matched: " + $1 + ", " + $2);
}

کولا شامل یک علامت گذاری متن بسیار قوی برای تطابق با نام match aliasing می شود. به عبارت ساده، هر عبارت تطابقی می تواند به عنوان یک شی از نوع match تعریف می شود. به سادگی این شی را به عنوان بخشی از عبارت قرار دهید.(مشابه با اساس تعریف یک تکرار کننده دارای نام در C++ و جاوا در یک حلقه for)

// explicit named match example
if(str =~ /foo(bar)/ as match1) {
   // default is matchA
   print(match1.$1);
}

برای حوزه عبارت if،match1 در حوزه است و می تواند برای وضوح به کار رود.مزیت match aliasing هنگامی که ما تطابق های لانه ای متعدد داریم بیشتر مشهود است. if(str =~ /foo(bar)/ as match1) {

  // We can use a backreference in a new match expression
  // $1 refers to match1 until a new match expression, after which
  // it refers to the new match in immediate scope. To refer back
  // we use match1 alias (match1.$1)
  if($1 =~ /b(ar)/ as match2) {
     print(match1.$1);    // match1 still in scope
     print(match2.$1);    // match2 now in scope, and the default
     print($1);           // same as match2.$1
  }
}

کولا چند استنتاج نوع ایستا با استفاده از کلمه کلیدی var(مشابه C#) و یا یک دستور new دارد که نوع از سمت راست استنتاج می شود.

// equivalent
var s = new Dog();
Dog s = new;

همچنین از سازنده موازی برای ساخت یک شی از شی دیگر پشتیبانی می شود.

Animal a = new Dog();
Animal b = a.new();
var v = a.new();  // v will be of the Animal type, but receives a Dog

کولا شامل یک عبارت foreach()نیز می شود که در حال حاضر روی آرایه ها و انواع داده ای داخلی دات نت موجود در system.collections و هر کلاسی که دارای تابع IEnumerator GetEnumerator()"" باشد را پشتیبانی می کند. foreach در کولامشابه با C# است که کد تکرار آرایه را هنگام استفاده از آرایه تولید می کند یا از واسط IEnumerator خروجی GetEnumeratorاستفاده می کند.

 // Uses .NET System.Collections
 var list = new System.Collections.ArrayList();   // note the inferred type
 list.Add("LITTLEDOG");
 list.Add("BIGDOG");
 list.Add("LITTLECAT");
 list.Add("BIGCAT");
 foreach(string s in list) {
    // Nested named matching
    if(s =~ /(LITTLE|BIG)/ as size) {
       if(s =~ /(DOG|CAT)/ as animal)
          print("Animal is a " + size.$1 + " " + animal.$1);
    }
 }

استفاده از بسیاری از کتابخانه های CLR دات نت ممکن است.

// System.IO.File sample
main() {
  foreach(var line in System.IO.File.ReadAllLines("flintstones.txt"))
    if(line =~ /FRED/)
      print(line);
}
// .NET System.Xml Example
main() {
  var doc = new System.Xml.XmlDocument();
    doc.LoadXml("<book genre='novel' ISBN='1-861001-57-5' misc='sale item'>" +
              "<title>The Handmaid's Tale</title>" +
              "<price>14.95</price>" +
              "</book>");
  var myElement = doc.get_DocumentElement();
  print(myElement.ToString());
  print(myElement.get_InnerXml());
}
// Oracle.DataAccess sample
main() {
  string first, last;
  var conn = new Oracle.DataAccess.Client.OracleConnection("Data Source=DEV;User Id=scott;Password=tiger;");
  conn.Open();
  var cmd = new Oracle.DataAccess.Client.OracleCommand("select first_name, last_name from doctor", conn);
  var reader = cmd.ExecuteReader();
  while(reader.Read()) {
    first = reader.GetString(0);
    last = reader.GetString(1);
    print(first + " " + last);
    conn.Close();
}

منابع[ویرایش]

ویکی‌پدیای انگلیسی