কোবরা (প্রোগ্রামিং ভাষা)

**কোবরা** () হলো একটি বিলুপ্ত সাধারণ-উদ্দেশ্যমূলক, অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ভাষা। এটি চার্লস এস্টারব্রুক দ্বারা নকশা করা হয়েছে এবং এটি .নেট ফ্রেমওয়ার্ক এবং মনো প্ল্যাটফর্মে চলে। 

এই ভাষাটি পাইথন, সি শার্প, আইফেল, অবজেক্টিভ-সি এবং অন্যান্য প্রোগ্রামিং ভাষা দ্বারা ব্যাপকভাবে প্রভাবিত। কোবরা স্ট্যাটিক এবং ডায়নামিক উভয় ধরনের টাইপিং সমর্থন করে। এর অন্যতম প্রধান বৈশিষ্ট্য হলো এতে ইউনিট টেস্ট এবং *কন্ট্রাক্ট* (চুক্তি) লেখার সুবিধা সরাসরি ভাষার সিনট্যাক্সের মধ্যে অন্তর্ভুক্ত রয়েছে। এছাড়াও এতে ল্যাম্বডা এক্সপ্রেশন, ক্লোজার, লিস্ট কম্প্রিহেনশন এবং জেনারেটরের সুবিধা রয়েছে।

কোবরা একটি মুক্ত সোর্স প্রকল্প; এটি ২৯ ফেব্রুয়ারি ২০০৮ সালে এমআইটি লাইসেন্স-এর অধীনে প্রকাশিত হয়েছিল।

## ইতিহাস ও দর্শন
কোবরা তৈরির মূল লক্ষ্য ছিল পাইথনের সহজ কোডিং শৈলীর সাথে সি শার্প বা জাভার মতো কম্পাইল্ড ভাষার পারফরম্যান্সের সমন্বয় ঘটানো। ডিজাইনার চার্লস এস্টারব্রুক চেয়েছিলেন এমন একটি ভাষা তৈরি করতে যা দ্রুত কোড লিখতে সাহায্য করে (র‍্যাপিড ডেভেলপমেন্ট) কিন্তু রানটাইমে উচ্চ গতি প্রদান করে। 

কোবরা কম্পাইলারটি নিজেই কোবরা ভাষায় লেখা (সেলফ-হোস্টিং), যা ভাষাটির সক্ষমতার একটি প্রমাণ। এটি সরাসরি .NET বাইটকোডে কম্পাইল হয়, ফলে এটি অন্যান্য .NET লাইব্রেরির সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ।

## বৈশিষ্ট্য
কোবরা ভাষার বৈশিষ্ট্যগুলোকে প্রধানত চারটি ভাগে ভাগ করা যায়:

;অবজেক্ট ওরিয়েন্টেড:
:* নামস্থান
:* ক্লাস, ইন্টারফেস, স্ট্রাক্ট, এক্সটেনশন, এনামারেশন
:* মেথড, প্রপার্টি, ইনডেক্সার
:* মিক্সিন, এক্সটেনশন মেথড
:* জেনেরিক্স, অ্যাট্রিবিউট

;গুণমান নিয়ন্ত্রণ:
:* চুক্তি, অ্যাসারশন 
:* ইউনিট টেস্ট, ডকস্ট্রিং
:* কম্পাইল-টাইম নাল-ট্র্যাকিং (নাল রেফারেন্স এরর কমানোর জন্য)

;প্রকাশভঙ্গি:
:* স্ট্যাটিক এবং ডায়নামিক বাইন্ডিং
:* লিস্ট, ডিকশনারি এবং সেট লিটারেল
:* `in` এবং `implies` অপারেটর
:* `for` এক্সপ্রেশন
:* স্লাইসিং
:* স্ট্রিং ইন্টারপোলেশন
:* কম্পাইল-টাইম টাইপ ইনফারেন্স
:* ল্যাম্বডা এবং ক্লোজার

;সাধারণ উৎপাদনশীলতা:
:* ব্যতিক্রম হ্যান্ডলিং
:* পোস্টমর্টেম ব্যতিক্রম রিপোর্ট
:* গারবেজ কালেকশন

;স্ক্রিপ্টিং সুবিধা:
:* পরিচ্ছন্ন সিনট্যাক্স (সেমিকোলন বা ব্রেস ব্যবহারের প্রয়োজন হয় না)
:* ডায়নামিক বাইন্ডিং
:* এক-ধাপে রান করার সুবিধা
:* হ্যাশ-ব্যাং লাইন (`#!`) সমর্থন

## উদাহরণ
নিচের উদাহরণগুলো একটি ফাইলে সংরক্ষণ করে `cobra <samp>&lt;filename&gt;</samp>` কমান্ড ব্যবহার করে রান করা যায়।

### হ্যালো ওয়ার্ল্ড
নিচে কোবরা ভাষায় লেখা একটি সাধারণ হ্যালো ওয়ার্ল্ড প্রোগ্রাম দেওয়া হলো:


```python
class Hello
    def main
        print 'HELLO WORLD'
```


### একটি সাধারণ ক্লাস
এখানে একটি সাধারণ ক্লাসের উদাহরণ দেওয়া হলো যেখানে প্রপার্টি এবং মেথড ওভাররাইড ব্যবহার করা হয়েছে:


```python
class Person

    var _name as String
    var _age as int

    cue init(name as String, age as int)
        _name, _age = name, age

    def toString as String is override
        return 'My name is [_name] and I am [_age] years old.'
```


### কন্ট্রাক্ট এবং ইউনিট টেস্টের ব্যবহার
কোবরা ভাষার একটি বড় বৈশিষ্ট্য হলো কোডের ভেতরেই শর্ত এবং পরীক্ষা লিখে রাখা যায়। নিচে একটি ব্যাংকিং সিস্টেমের ছোট উদাহরণ দেওয়া হলো:


```python
class Account
    var _balance as decimal

    cue init(balance as decimal)
        require balance >= 0
        _balance = balance

    def deposit(amount as decimal)
        require amount > 0
        ensure _balance > old _balance
        _balance += amount

    def withdraw(amount as decimal)
        require 
            amount > 0
            amount <= _balance
        ensure 
            _balance < old _balance
        body
            _balance -= amount

    test
        # এটি একটি ইউনিট টেস্ট যা কম্পাইল করার সময় পরীক্ষা করা যায়
        a = Account(100)
        a.deposit(50)
        assert a._balance == 150
        a.withdraw(30)
        assert a._balance == 120
```


### লিস্ট কম্প্রিহেনশন এবং জেনারেটর
পাইথনের মতো কোবরাতেও খুব সহজে লিস্ট নিয়ে কাজ করা যায়:


```python
class Logic
    def main
        # ১ থেকে ১০ এর মধ্যে জোড় সংখ্যাগুলোর বর্গ তৈরি
        nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        squaresOfEvens = for n in nums where n % 2 == 0 get n*n
        print squaresOfEvens 
        # আউটপুট: [4, 16, 36, 64, 100]
```


### ডায়নামিক টাইপিং উদাহরণ
যদিও কোবরা মূলত স্ট্যাটিক্যাল টাইপড ভাষা, তবে প্রয়োজনে এটি ডায়নামিক টাইপিং সমর্থন করে:


```csharp
class DynamicExample
    def main
        x as dynamic = 10
        print x + 5
        
        x = 'Cobra'
        print x.length
        print x.toUpper
```


## আরও দেখুন
* সি#
* পাইথন
* বুর এর জন্য আরেকটি পাইথন-সদৃশ ভাষা

## তথ্যসূত্র

## বহিঃসংযোগ
* 
* কোবরা নিউজ ইনডেক্স 

বিষয়শ্রেণী:.নেট প্রোগ্রামিং ভাষা
বিষয়শ্রেণী:২০০৬-এ নির্মিত প্রোগ্রামিং ভাষা
বিষয়শ্রেণী:এমআইটি লাইসেন্স ব্যবহারকৃত সফটওয়্যার
বিষয়শ্রেণী:বস্তু-সংশ্লিষ্ট প্রোগ্রামিং ভাষা