WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте
Cobra
Класс языка мультипарадигмальный:
объектно-ориентированный
Появился в 2006
Автор Чак Эстербрук
Расширение файлов .cobra
Выпуск 0.9.6 (23 декабря 2013)
Система типов статическая, строгая, динамическая, с автовыведением типов
Основные реализации: .NET Framework, Mono
Испытал влияние Python, Eiffel, C#, Objective-C, D
Лицензия MIT
Сайт cobra-language.com

Cobra — высокоуровневый объектно-ориентированным язык программирования общего назначения. Разработан Чаком Эстербруком (англ.) для платформ .NET и Mono. Синтаксис языка основывается на синтаксисе Python, используются отступы для синтаксического выделения блоков кода. Язык поддерживает как статическую типизацию, так и динамическую, обеспечивает поддержку контрактного программирования и встроенное модульное тестирование. Имеет возможность использования лямбда-выражений, замыканий, списочных выражений и генераторов. Cobra обеспечивает быструю разработку и высокую производительность[1].

Реализация языка Cobra имеет открытый исходный код, выпущена под лицензией MIT 29 февраля 2008 года, позволяющей беспрепятственное использование и модификацию кода.

Синтаксис и семантика

Строки документации

Cobra предлагает механизм документирования кода DocString.

class Utils
    shared
        def countChars(s as String, c as char) as int
            """
            Возвращает количество символов c в строке s.
            """
            count = 0
            for ch in s
                if ch == c
                    count += 1
            return count

Модульное тестирование

Позволяет проверить на корректность отдельные класс, свойство или метод исходного кода программы.

class Utils
    shared
        def countChars(s as String, c as char) as int
            """
            Возвращает количество символов c в строке s
            """
            test
                assert Utils.countChars('', c'x') == 0
                assert Utils.countChars('x', c'x') == 1
                assert Utils.countChars('X', c'x') == 0
                assert Utils.countChars(' ! ! ', c'!') == 2
            body
                count = 0
                for ch in s
                    if ch == c
                        count += 1
                return count

Контрактное программирование

Обеспечивает корректные входные данные вызываемому компоненту, помогая поймать ошибки раньше, когда они легче диагностируются.

class Customer
    var _contacts as List<of Contact>
    get contacts from var
    def addContact(contact as Contact)
        require
            contact not in .contacts
            contact.name
            contact.customer is nil
        ensure
            contact.customer == this
            .contacts.count == old .contacts.count + 1
        body
            contact.customer = this
            _contacts.add(contact)

Слежка за nil во время компиляции

Позволяет избежать во многих случаях ошибки нулевого указателя во времени выполнения. В Cobra nil может быть передан если разрешен nilable тип: один суффикс знака вопроса (?).

class Foo
    def bar(s as String?)
        if s # same as "if s is not nil"
            print Utils.countChars(s, c'x')

Влияние других языков на Cobra[2]

Cobra создавался под влиянием множества языков программирования:

  • Python, Ruby — синтаксис
  • C#, C++ — производительность работы
  • Objective-C, Visual Basic — статические и динамические типы
  • Eiffel, Spec# — метод контрактного программирования
  • Spec#, iihtdioa, C# — слежка за nil во время компиляции

IDE

Пример

Пример «Hello world»:

class Hello
    def main
        print 'Hello, world!'

Пример генератора чисел Фибоначчи:

class Fib
    def compute(count as int) as List<of int> is shared 
        list = List<of int>()
        a, b = 0, 1
        for i in count
            list.add(b)
            a, b = b, a + b
        return list

class Program
    def main
        i = 1
        for n in Fib.compute(10)
            print '[i]. [n]'
            i += 1

Пример класса:

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'

Примечания

  1. Krill, Paul. Cobra language slithering to open source, InfoWorld (Feb 7, 2008). Проверено 31 августа 2010.
  2. Language Presentation at Lang .NET Symposium 2008 (недоступная ссылка) Cobra Programming Language — Chuck Esterbrook

Ссылки

Логотип Викисловаря
В Викисловаре есть статья «cobra»

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии