KBasic

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 20:10, 1 июня 2016.
KBasic
Парадигма мультипарадигменный: рефлексивно-ориентированный, объектно-ориентированный, императивный, скриптовый
Спроектировано KBasic Software
Первый   появившийся 2000
Печать дисциплины статическая
Лицензия LGPL
Портал: http://www.kbasic.org/
Под влиянием
VB6

KBasic - проект с открытым исходным кодом, который развивался на протяжение многих лет. Он включает Java-подобную реализацию объектно-ориентированного программирования и обратную совместимость с VB6 и QBasic®. Хотя синтаксис 100% совместим с ними, но KBasic - не VB6 или VB.NET клон! Хотя KBasic синтаксис совместим с VB.NET, аналогичные функции, объекты и классы также присутствуют. KBasic сочетает в себе выразительную силу объектно-ориентированных языков, таких как C ++, знакомость и простоту использования VB6. Это позволяет разработчикам с установленной базой приложений VB6 начать разработку для Windows®, Mac® OS X и Linux®, без длительного обучения: KBasic использует знакомую парадигму визуального проектирования и имеет полную реализацию языка Basic.

Программы KBasic

KBasic состоит из следующих программ:

  • среды разработки с визуальным дизайнером формы (IDE),
  • компилятора (KBC)
  • интерпретатора (VM)
  • графических компонент пользовательского интерфейса. (VM)

Это около 15 MB исходного кода (C++).

Это действительно легко разрабатывать мульти-платформенные приложения с графическим интерфейсом с использованием хорошо известного языка Basic согласно современным веяниям индустрии, потому что KBasic использует похожую парадигму визуального проектирования и имеет полную реализацию языка Basic. KBasic использует Qt для обеспечения кросс-платформенности(библиотека Qt является ведущей технологией кросс-платформенной разработки, доступная по всему миру).

Обзор возможностей

В этой секции вы познакомитесь с KBasic. Так как я не могу описать все возможности в деталях, как в книге по программированию, я опишу некоторые основы и особенности KBasic для профессионалов. Несмотря на то, что вы знаете C++, VB6, или схожий Basic, или Java у вас не возникнет проблем с использованием KBasic. Он заимствует многие концепции из этих языков программирования.

  • Напиши один раз и устанавливаю нативные приложения на Windows, Mac OS X и Linux.
  • ООП RAD возможности позволяют разрабатывать быстро.
  • Намного дешевле, чем другие Basic.
  • обратная совместимость с VB6 и поддержка наследования и других ООП концепций.
  • Разрабатывай на разных платформах.
  • Портировать существующий VB6 проект просто, потому что KBasic на 100% синтаксически совместим.
  • Знакомый процесс разработки и знакомая среда.
  • Такой же синтаксис, как и у VB6
  • Легок в изучении: в среде есть встроенные подсказки и справка.
  • Истинная кросс-платформенная установка приложения.
  • Знакомые концепции языков программирования: ООП, одиночное наследование, исключения и т.д.
  • Drag & Drop разработка пользовательского интерфейса.
  • Богатый набор виджетов пользовательского интерфейса.
  • Знакомые концепции редактирования: легкое и быстрое просматривание исходного кода.
  • Знакомые концепции редактирования II: автозаполнение для встроенных функций и типов данных, а также для определенных пользователем функций и типов.
  • Автозаполнение (только для версии Professional)
  • Знакомые концепции отладки: один шаг, обзор значения переменных, локальная и глобальная область видимости.
  • Знакомые концепции Установки/Удаления программы: для Linux (KDE), Mac OS X и Windows.

Возможности в деталях

KBasic - объектно-ориентированный: с объектами и классами, одиночным наследованием и полиморфизмом, private, public, protected областями видимости для элементов объектов.

KBasic синтаксически совместим со старым Basic, таким как QBasic или VB6.

  • необязательные параметры
  • paramarray
  • именованные аргументы [mySub(param1 := 23, param2 := 100)]
  • goto при ошибке
  • метки и goto
  • именованные переменные (с сокращениями, например, name$ или n%)
  • поддержка свойств
  • обычные переменные, массивы и определенные пользователем типы могут быть переданы в функции по ссылке.
  • KBasic имеет виртуальную машину.
  • Автоматическая сборка мусора.
  • Защищенные данные и массивы.
  • Современный способ обработки ошибок через исключения.

KBasic - не один язык программирования, а три языка программирования. Используя одну из следующих команд, вы можете переключить KBasic в один из следующих режимов:

  • Если вы хотите использовать новые возможности KBasic (по умолчанию) используйте OPTION KBASIC.
  • Если вы хотите использовать старый VB6, то используйте OPTION OLDBASIC.
  • Для очень старого Basic кода, как QBasic, вы должны использовать OPTION VERYOLDBASIC.

Есть возможность использовать все три режима в одной программе, один модуль использует один режим, а другие модули используют другой режим. Просто напишите одну из выше указанных опций в начале модуля. По умолчанию - это OPTION KBASIC.

Как и другие языки программирования, KBasic поддерживает команды для условий, преобразования типов, обработки ошибок, событий и содержит библиотеку функций такие, как gui, io, math и так далее.

KBasic надежен

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

KBasic - язык типизированный. Это означает, что KBasic можете сделать очень подробные осмотры программы в поисках потенциальных несоответствий типа. KBasic более строго типизирован, чем стандартный BASIC. Одной из самых важных характеристик, касающихся надежности, является правильное управление памятью. Из-за отсутствия поддержки указателей, KBasic исключает опасность случайно перезаписи данных в памяти во время работы программы. Точно также, сборщик мусора KBasic предотвращает утечки памяти и другие вредоносные ошибки связанные с динамическим распределением памяти и ее освобождением. Кроме того, KBasic интерпретатор рассматривает разные проблемы во время выполнения, например, находятся ли массивы и строки по-прежнему в своих пределах. Обработка исключений является еще одной новой функцией. Исключением является сигнал, возникающий в случае ошибки выполнения программы. Используя Try / Catch / Finally выражения, вы можете разместить все ваши подпрограммы обработки ошибок в одном месте, что позволит легче находить и исправдять ошибки.

KBasic - быстрый

KBasic является интерпретируемым языком программирования. Поэтому он никогда не будет таким быстрым, как скомпилированный машинный код такого языка, как С. На самом деле, KBasic примерно в 20 раз медленнее, чем C. Теперь, прежде чем вы передумаете читать далее, имейте в виду, что этой скорости достаточно для почти всех видов GUI приложений, которые часто ждут от пользователя ввода чего-то.

При анализе возможностей KBasic, вы должны принять во внимание размещение KBasic по отношению к другим языкам программирования. На одном конце полностью интерпретируемые языки, такие как PHP и UNIX-оболочка. Эти языки являются очень полезными для создания проекта, но они выполняются медленно. На другом конце - полностью компилируемые языки программирования. С помощью этих языков можно получить очень быстрые программы, но не очень хорошо портируемые или надежные.

KBasic находится между этими языками. Производительность KBasic гораздо выше, чем у языков программирования высокого уровня, но имеет легкость и портативность этих языках. Хотя KBasic не так быстр, как скомпилированная С программа, но он платформо-независим, предоставляет возможность писать надежные программы для Windows, Mac OS X и Linux.

Простой пример

Теперь, у вас есть понимание того, что из себя представляет KBasic, давайте прекратим обсуждать абстрактные фразы и посмотрим на простую KBasic программу. Перед вами всеми любимый "Hello World":

' program beginning

CLS
Print "Hello World!"
Print
Print                                  
Print "                / `._     .       .      _.' \"
Print "              '.@ = `.     \     /     .' = @.'"
Print "               \ @`.@ `.    \   /    .' @.'@ / "
Print "                \;`@`.@ `.   \ /   .' @.'@`;/  "
Print "                 \`.@ `.@ `'.(*).'` @.' @.'/   "
Print "                  \ '=._`. @ :=: @ .'_.=' /    "
Print "                   \ @  '.'..'='..'.'  @ /     "
Print "                    \_@_.==.: = :.==._@_/      "
Print "                    /  @ @_.: = :._@ @  \      "
Print "                   /@ _.-'  : = :  '-._ @\     "
Print "                  /`'@ @ .-': = :'-.@ @`'`\    "
Print "                  \.@_.=` .-: = :-. `=._@./    "
Print "                    \._.-'   '.'   '-._./      "
Print
Print "... you just ran your first KBasic program!"

Введите эти строки в новое окно кода KBasic. После запуска вы увидите на экране прекрасную бабочку. Теперь давай перейдем к следующей части.

В чем разница между KBasic и Visual Basic 6?

KBasic очень похож на VB6, что делает его легким в изучении для разработчиков VB6. KBasic содержит все элементы синтаксиса VB6 и реализует средства управления и другие компоненты таким же образом, как и VB6. Есть также некоторые важные различия между KBasic и VB6, такие как пре-процессор и обработка исключений. Кроме того, KBasic предоставляет дополнительные объектно-ориентированные расширения, что делает его истинным объектно-ориентированный языком программирования. Это одно из основных различий между KBasic и VB6.

Программа KBasic может состоять из одного или более классов, модулей, форм, функций или подпрограмм. Как и VB6, есть глобальные пространства имен, функции, подпрограммы и переменные. KBasic не поддерживает команды препроцессора (например, #ifdef, #if, и т.д.), но эта функция запланирована на будущее. Тем не менее, в теории, команды предварительной обработки не нужны, потому что KBasic является независимой от платформы языком программирования и, следовательно, не имеет зависимость от платформы. Кроме того, простые типы данных являются такими же, за исключением того, что их размер может измениться. Измененные размеры могут быть:

  • Boolean 1 байт
  • Integer 32 бита
  • Long 64 бита

Синтаксис KBasic

Объявление переменных

Перед использованием переменных, вы должны объявить их. Вы должны определить имя и тип данных переменной. "Dim"-оператор объявляет переменную. "Dim"-выражения являются одними из многих выражений объявления переменной, которые немного отличаются от других. Другие выражения декларации: "Redim", "Static", "Public", "Private", "Protected" и "Const".

Dim myName As String

Переменные могут быть объявлены везде: в процедурах, функциях и подпрограммах, не только в верхней части процедур, функций и подпрограммах. Тем не менее, в большинстве своем они находятся наверху.

Используйте следующие правила для имен процедуры, функции, подпрограмм, постоянных, переменных или аргументов в KBasic:

  • Используйте буквы (A-Z, a-z) или подчеркивание (_) в качестве первого символа.
  • Никогда не используйте пробелы (), период(.), восклицательный знак(!), или следующие символы: @, &, $, # в именах.
  • Имя может содержать цифры, но не должно начинаться с цифры.
  • Не используйте имена, которые уже используются для предопределенных элементов языка KBasic, такие как ключевые слова (например, "if"), встроенных функций (например, "Print"), классов и т.д. Это приведет к коллизии имен, в которой исходный элемент языка будет подразумеваться. Ваша программа не скомпилируется.
  • Вы не можете использовать переменные с тем же именем в той же области. например Вы не можете объявить переменную "age" два раза в процедуре, но вы можете объявить "age" в процедуре и в модуле, поскольку они объявлены в различных областях (в разных местах).

Жизненный цикл переменных

Жизненный цикл переменных - это время, в течение которого переменная существует или имеет значение. Значение переменной может быть изменено во время ее жизни. Если переменная находится вне области видимости, то она не имеет значение. Если процедура выполняется, переменная существует после его "Dim"-выражения. Локальные переменные существуют, пока процедура не завершена; после повторного ввода процедуры все переменные создаются снова после своих "Dim"-выражений.

Если вы не измените значение переменной во время ее жизни в программе, он содержит значение, записанное при запуске программы. Переменная, объявленная в суб содержит назначенное значение до тех пор, к югу не осталось. Если же к югу снова призвал значение сбрасывается в инициализирован значением.

При использовании статически объявленных переменных в процедурах переменные существуют только один раз в памяти, если процедура не вызывается несколько раз с помощью рекурсии. Если вы используете глобальные модульные переменные или класс-переменные, это то же самое. Переменные существуют один раз в памяти во время выполнения. Если вы используете переменные экземпляра необходимо учитывать, что они существуют только вместе с экземпляром объекта (object), к которому они принадлежат.

Функции

Функции очень похожи на подпрограммы в том, что и те, и те процедуры, но возвращают значение и могут быть использованы в выражениях.

Синтаксис:

Function Name([Arguments])[As Type]
  [Statements]
End Function

Function Name([Arguments])[As Type] [Throws Name, ...]
  [Statements]
End Function

Аргументы функции-процедуры используются в качестве аргументов подпрограммы-процедуры. Определяем функцию-процедуру с помощью ключевого слова "Function".

Классы

Простое приложение может содержать форму, в то время как весь исходный код находится внутри модуля формы этой формы. Но если приложение становится все больше и больше, то было бы полезно, чтобы можно было писать исходные код разных форм в одном месте, так что нужно место, чтобы писать исходный кодов вне форм. Вот здесь появляются классы.. Создайте класс, который содержит методы, которые полезны для ваших форм. KBasic код хранится в классах или модулях. Вы можете архивировать код в классах. Каждый класс состоит из объявлений и методов, которые вы вставили. Класс может содержать:

  • Объявления - для переменных, типов, перечислений и констант.
  • Методы (называемые также процедурами) - которые не были назначены на специальное событие или объект. Вы можете создать столько процедур, сколько вам нужно, например, подпрограммы-процедуры без возвращаемого значения или функции-процедуры.
  • Сигнал / Слот-методы - это специальные методы, которые полезны только вместе со связыванием. Смотрите документацию привязок в KBasic IDE для получения дополнительной информации.
  • Свойства - это переменные, которые доступны через два специальных метода (методы для получения и установки значения). Свойства доступны без необходимости писать скобки, когда вы их используете.

Синтаксис:

[Abstract] Class Name Inherits ParentClassName

  [Static] Dim Name As Type
  [Static] Public Name As Type
  [Static] Protected Name As Type
  [Static] Private Name As Type
  Const Name As Type
  Public Const Name As Type
  Protected Const Name As Type
  Private Const Name As Type
  ...

  [Public | Protected | Private] 
  Enum Name
    Name As Type
    ...
  End Enum
  ...

  [Public | Protected | Private] 
  Type Name
    Name As Type
    ...
  End Type
  ...

  [Public | Protected | Private]  
  Property Name As Type 

    Get
      [Statements]
    End Get 

    Set(Argument) 
      [Statements]
    End Set 

  End Property 
  ...

  [Public | Protected | Private] 
  Constructor Name([Arguments])
    [Statements]
  End Constructor
  ...

  [Public | Protected | Private] 
  Destructor Name( ) 
    [Statements]
  End Destructor

  [Static] [Public | Protected | Private] 
  Function Name([Arguments]) [As Type] [Throws Name, ...]
    [Statements]
  End Function
  ...

  [Static] [Public | Protected | Private] 
  Sub Name([Arguments]) [Throws Name, ...]
    [Statements]
  End Sub
  ...

  [Public | Protected | Private] 
  Slot Name([Arguments])
    [Statements]
  End Slot
  ...

  [Public | Protected | Private] 
  Signal Name([Arguments])
    [Statements]
  End Signal
  ...

End Class
Bigger example:

Class Salsa Inherits Waltz

  Public Enum class_enum
     Entry
     Entry2
     Security = Entry
  End Enum 

  Public Type class_type
    element As Integer
  End Type 

  Const classConst = 4

  Public publicInstanceVar As Integer
  Private privateInstanceVar As Integer 
  Protected protectedInstanceVar As Integer 

  Static Public publicClassVar As Integer
  Dim publicModuleType As module1.module_type
  Dim publicModuleType2 As module_type

  ' parent constructor call inside constructor

  Sub meExplicit()
    Dim localVar = Me.publicInstanceVar ' it is the same with parent
    Dim localVar2 = Me.publicClassVar  
    Dim localVar3 = Salsa.publicClassVar 
    Dim localVar4 = Salsa.classConst 
    Dim localVar5 = Me.classConst 
'    
    Dim localVar6 As class_enum 
    localVar6 = Salsa.class_enum.Entry 
'    Dim localVar7 As Me.class_enum   '  full type name not allowed 
    Dim localVar8 As class_type 
  End Sub 

  Sub meImplicit()
    Dim localVar = publicInstanceVar
    Dim localVar2 = publicClassVar 
    Dim localVar3 = classConst 
    Dim localVar4 As class_enum 
    Dim localVar5 As class_type

  End Sub   Sub classSub()
    Const localConst = 6
    Dim n = localConst
  End Sub 

  Sub classSubWithArgument(i As Integer)
    Dim localVar = i
  End Sub   Function classFunction() As String
    Return "hello"
  End Function 
  Static Public Sub test() Throws Waltz   
    Throw New Waltz     
  End Sub   Private pvtFname As String   Public Property Nickname As String 

    Get
      Print "Hi"
    End Get 

    Set ( ByVal Value As String ) 
      Print "Hi"
    End Set 

  End Property End Class

Ссылки

  1. KBasic

Автор статьи: Макаров Д. В.