Basic4android - Современная и удобная среда (IDE) для разработки нативных приложений для ОС Android любой сложности. Включает в себя все необходимы средства планирования, проектирования, компиляции и эмуляции приложений. Данной средой пользуются такие техно гиганты как IBM, HP, NASA. Среди разработчиков среда популярна своими возможностями прикладного программирования
Разработчик: Anywhere Software Актуальная версия: 10.5 OC: Microsoft Windows Vista / 7 / 8 / 10
Порядок установки: - Устанавливаете B4A (в любую удобную папку) - Устанавливаете .NET Framework версии не ниже 4.5 (т.к. B4A написан на .NET то и для запуска среды нужен этот фреймворк) - Устанавливаете Android SDK (sdk-tools, platform-tools) тоже в любую удобную папку - Устанавливаете Java (в любую удобную папку, но! обязательно пропишите в переменную PATH путь к компилятору javac.exe) - Запускаете B4A и переходите в настройки "Инструменты" - "Конфигурация путей" и прописываете следующие пути: * javac.exe (сюда прописать путь к компилятору Java, пример: C:Program FilesJavajdk_8u40binjavac.exe) * android.jar (сюда прописать путь к файлу платформы под которую будет компилироваться код вашей программы, пример: C:Program Filesandroid-sdkplatformsandroid-28android.jar) * Дополнительные библиотеки (сюда прописывается путь к папке в которой будут лежать ваши библиотеки и скаченные с интернета * Общие модули (сюда прописывается путь к общей папке, в которой будут лежать модули общего пользования, например в разных проекты вы используете один и тот же модуль SameClass.bas и чтобы его постоянно не копировать в папку проекта, можно положить в общую папку и IDE будет дергать его от сюда)
Выведет в консоль разработки текстовое сообщение "Привет мир!". В ОС Android есть Logcat, куда и будет выводится наше сообщение. В B4A это называется Log и для него есть соответствующее окошко, где можно отфильтровать все что выводится в Logcat. Вывод сообщение осуществляется с помощью комманды Log([переменная]). В качестве переменной у нас будет текст заключенный к квадратные кавычки (это такой синтаксис B4A говорящий что содержимое кавычек является текстовым сообщением)
Пример кода: SubActivity_Create(FirstTime As Boolean) Log("Привет мир!") End Sub Аналогичный пример на других языках: C++, Delphi, Python, Ruby, Java, C#, VB.NET
Разъяснения по коду: В B4A программа для Android начинается с создания Activity. Относитесь к нему как к некоему холсту, на котором будут размещаться элементы управления вашей программы. Вся структура вашей программы будет набором модулей, активити и классов. В данном примере, создается подпрограмма Sub ... End Sub (сокр. от слова Subroutine, источник) с названием Activity, далее (после _ нижнего подчеркивание, что означает в B4A обработку события связанного с подпрограммой) идет имя события Create (означающее создание подпрограммы Activity) с наследуемым параметром FirstTime типа Boolean
Hello world UI / Ваша первая программа с визуальным отображением
В B4A так же можно выводить сообщения на экран пользователя устройства (телефона, планшета итд.). Вывод таких сообщений осуществляется путем создание области на экране устройства (Panel) в которую и выводится требуемое содержимое (текст, картинки, элементы управления - кнопочки, галочки, списки итп.). Рассмотрим функции MsgBox и MsgBox2. Они выводят сообщение на экран с элементами управления - кнопками "Ок", "Отмена"
Пример кода: (MsgBox) SubActivity_Create(FirstTime As Boolean) Msgbox("Привет мир!", "Моя первая программа") End Sub Результат:
Пример кода: (MsgBox2) SubActivity_Create(FirstTime As Boolean) Msgbox2("Привет мир!", "Моя первая программа", "ДА", "Ну нафиг!", "НЕТ",Null) End Sub Результат:
Синтаксис: Msgbox([message], [title]) Msgbox2([message], [title], [positive], [cancel], [negative], [icon]) Разъяснения: Переменные message, title, positive, cancel и negative являются текстовыми, любую из них можно пропустить (оставив пустые кавычки или заменив их на Null). Из скриншотов видно что message и title отвечают за заголовок и текст сообщения соответственно, а positive, cancel и negative отвечают за текст кнопочек управления. Переменная icon отвечает за картинку, которая будет выводится в окошке сообщения (тип данных: android.graphics.Bitmap), я ее пропустил умышленно (заменив на Null) т.к. забивать себе голову сложными типами данных на этапе написания своей первой программы просто неразумная трата времени. Как говорится - сначала выведен на экран что-то, а по-ходу дела будем разбираться как это работает ;))
Basic4android является модульным средством разработки ПО для Android. Все модули программы разбиты на типы: модули активити, модули классов, модули кода и сервисные модули. Давайте разберемся за что они отвечают, зачем они нужны и как в B4A реализована взаимосвязь между ними
Подпрограммы модуля: SubProcess_Globals ... End Sub SubGlobals ... End Sub SubActivity_Create(FirstTime As Boolean) ... End Sub SubActivity_Resume ... End Sub SubActivity_Pause(UserClosed As Boolean) ... End Sub
Подпрограммы модуля: SubClass_Globals ... End Sub Public SubInitialize(Callback As Object, EventName As String) ... End Sub Public SubDesignerCreateView(Base As Panel, Lbl As Label, Props As Map) ... End Sub Public SubGetBase As Panel ... End Sub
Подпрограммы модуля: SubProcess_Globals ... End Sub SubService_Create ... End Sub SubService_Start(StartingIntent As Intent) ... End Sub SubService_TaskRemoved ... End Sub SubApplication_Error(Error As Exception, StackTrace As String) As Boolean ... End Sub SubService_Destroy ... End Sub
Этот модуль является основным в программе на B4A. По сути это командный центр управления всеми модулями вашей программы. В этом модуле декларируются все глобальные константы, переменные, процедуры и события вашей программы, что будут влиять, в первую очередь, в внешний интерфейс программы - как, где и что будет отображаться. Так же в активити декларируются все классы программы, за исключением меж классовых связей. В этом модуле так же обрабатываются все обращения к вашей программе другими программами Android, за исключением ресиверов
Описание подпрограмм модуля: Process_Globals - В этой подпрограмме декларируются глобальные переменные, которые будет обрабатываться во всех модулях программы Globals - В этой подпрограмме декларируются только те переменные, которые будут обрабатываться непосредственно в этом активити программы Activity_Create - В этой подпрограмме (в основном) производится инициализация задекларированных переменных, событий и классов. Подпрограмма имеет наследуемый параметр FirstTime передается в эту подпрограмму системой и принимает значения True или False и означает, что запущенный процесс приложения впервые или повторно создал активити. Если кратко - то код этой подпрограммы выполняется независимо от всех других при запуске вашей программы Activity_Pause - Данная подпрограмма срабатывает когда вы сворачиваете активити вашей программы, пример - нажатие физ.кнопки Home на устройстве или переход к другой программе свайпом или иным способ управления запущенными приложениями. Подпрограмма имеет наследуемый параметр UserClosed, принимающий значения True или False и означает, что вы свернули свою программу путем переключения на раб.стол итп. способом или же нажали физ.кнопку (вирт.кнопку) назад, тем самым вызвав событие закрытие программы Activity_Resume - Данная подпрограмма срабатывает когда вы возвращаетесь в активити вашей программы из другой. Данная подпрограмма так же срабатывает при первом запуске вашей программы (так устроен B4A)
Модуль класса (Standart Class)
В этом модуле создаются и обрабатываются объекты и их события как экземпляр уже существующих классов, так и ваших собственных. Что такое классы в объектно-объектно-ориентированных языках программирования можно описать как существительное, такое как человек, место или вещь, или что-то номинализованное. Например, класс "Банан" будет представлять свойства и функциональность бананов в целом. Отдельный конкретный банан будет экземпляром класса "Банан" и/или объектом типа "Банан". Более подробно можно почитать в википедии на Английском или на Русском. Данный тип модуля программы B4A (на мой взгляд) самый сложный для понимания, классы вообще структура самая сложная т.к. все функции, процедуры и прочие элементы управления программой обыватель зачастую воспринимает как должное, но каждый из них есть класс, который имеет свою структуру, особенности поведения с другими элементами управления программой итд. итп. В общем, классы - это завершающая ступень программирования в B4A, т.к. освоив их, уже нет потребности в поисках той или иной библиотеки ибо можно взять существующую и допилить ее функционал создав свой класс как экземпляр уже существующего, дополнив его требуемым функционалом.
Описание подпрограмм модуля: Class_Globals - В этой подпрограмме декларируются глобальные переменные, которые будет обрабатываться во всех подпрограммах данного класса Initialize - Это обязательная к исполнению подпрограмма при инициализации данного класса из других модулей программы. Обычно здесь инциализируются все переменных объявленные в данном классе. Без вызова данной подпрограммы, невозможна работа с другими подпрограммами данного класса из других модулей программы
Модуль класса (CustomView Class)
В этом модуле отрабатывают свой функционал подпрограммы чей целью есть визуальное отображение в Activity ваших личных элементов управления (кнопочки, галочки, листинги итп.). Так как этот модуль есть класс, то наследует все свойства обычного класса (Standart Class) и его подпрограмм.
Описание подпрограмм модуля: Class_Globals - В этой подпрограмме декларируются глобальные переменные, которые будет обрабатываться во всех подпрограммах данного класса Initialize - Это необязательная к исполнению подпрограмма с точки зрения пользователя модулей программы и вызывается она автоматически при инициализации класса. При этом, ее содержимое желательно не менять (то содержимое, что предоставляется по-дефолту), но можно дополнять своими инициализациями задекларированными в глобальной подпрограмме этого класса DesignerCreateView - Эта подпрограмма задействуется когда вы работаете с WYSIWYG редактором элементов управления программой. Она передает ему все требуемые настройки класса вашей вьюшки, так же здесь добавляются на панель вьюшки другие элементы визуального управления программой - кнопочки, галочки итп. Данная подпрограмма имеет наследуемые параметры Base, Lbl и Props в которых в подпрограмму передаются основная панель вашей кастомной вьюшки, ее свойство Text (вызывается через Lbl.Text) и карту кастомных настроек вьюшки соответственно GetBase - Эта подпрограмма предназначена для получения основной панели вашей вьюшки. Честно говоря, не совсем понимаю актуальность этой подпрограммы как обязательной, но она почему-то создается автоматически при создании нового модуля CustomView Class. Скорее всего это была чья-то просьба разработчику B4A и он автоматизировал добавление этой подпрограммы
Модуль кода
Это всеядный, если так можно охарактеризовать, модуль. Здесь можно разместить весь прикладной функционал вашей программы. Догадываюсь что именно для расчистки активити и был предназначен этот модуль. Но у него есть свои ограничения - в нем нельзя на-прямую обращаться к классам программы, зато к подпрограммам этого модуля легко обращаться из всех других модулей программы. Как этот модуль описывает разработчик B4A - этот модуль содержит статический код, который может быть использован в разных проектах как повторяющийся (дублирующий) однотипные процессы с типами и массивами данных и обычно доступ к таким модулям прописывается в настройках B4A - "Инструменты" - "Конфигурация путей" - "Общие модули". Для меня это модуль позволяющий не захламлять рутинным кодом все остальные модули программы
Описание подпрограмм модуля: Process_Globals - Эта подпрограмма предназначена для декларации переменных используемых внутри модуля кода и меж-модульных связей модулей кода внутри одной программы
Сервисный модуль
Это пожалуй самый темный модуль программы. Некоторые представители сообщества пингвинов называют подобные конструкции демонами - то, что скрыто от глаз, аля задный фон процесса программы. Ну а по сути так и есть - задний фон вашей программы. Здесь выполняются фоновые процессы когда программа свернута, когда вы включили свое устройство, но не запускали программу, а ее сервисные модули уже работают. Разумеется все это контролируется разрешениями в манифесте и самом Android.
Описание подпрограмм модуля: Process_Globals - Эта подпрограмма предназначена для декларации переменных используемых внутри модуля кода и меж-модульных связей модулей кода внутри одной программы Service_Create - Эта подпрограмма выполняется при создании сервиса Service_Start - Эта подпрограмма выполняется при запуске созданного сервиса. Разница между этой подпрограммой и Service_Create в том, что эта может запускаться, останавливаться и заново запускаться, при этом каждый раз будет срабатывать эта подпрограмма и выполняться код ее содержимого. Эта подпрограмма наследует переменную StartingIntent типа (android.intent) в которой передается данные от процесса вызвавшего этот сервисный модуль. Применяется для перехвата событий ресивера, таких как СМС-сообщения, системные события самого Android итп. Service_TaskRemoved - Эта подпрограмма выполняется когда вашу программу убирают из списка запущенных в Android, разумеется если это не ограничено в манифесте программы Application_Error - В этой подпрограмме можно обрабатывать ошибки программы во время выполнения фоновых процессов. По-дефолту она возвращает системе значение True чтобы обработчик ошибок Android перехватывал ошибки программы и сам принимал вердикт - оборвать жизненный цикл вашей программы или ошибка не критическая и можно понизить разрешения и продолжить ее исполнение. Эта подпрограмма наследует переменные Error и StackTrace в которых передаются содержимое вызвавшее ошибку исполнения программы и стек где именно произошел сбой соответственно Service_Destroy - Это подпрограмма выполняется когда система Android убивает ваш сервис программы, либо это делаете вы сами путем полного завершения процесса программы. Сам Android иногда принимает такое решение если в настройках стоят фильтры на фоновые процессы или просто не хватает оперативной памяти обработать ваш сервисный модуль
AdditionalJar - Позволяет добавлять в функционал программы сторонные JAR библиотеки не имеющие своего B4A wrapper Пример: #AdditionalJar: picasso-2.2.0 При этом библиотека picasso-2.2.0.jar должна лежать в папке библиотек AdditionalRes - Позволяет добавлять в конечный APK ресурсы из папки Пример: #AdditionalRes: resources\ При этом в APK добавяться ресурсы из папки resources лежащей внутри папки с проектом программы ApplicationLabel - Позволяет зменять название вашей программы в лончере Пример: #ApplicationLabel: Моя программа BridgeLogger - Позволяет вести логи вашей программы при подключении к B4A через B4A-BridgeLogger Пример: #BridgeLogger: True Возможные варианты: True или False CanInstallToExternalStorage - Позволяет устанавливать вашу программу на внешний накопитель (External SD card) Пример: #CanInstallToExternalStorage: True Возможные варианты: True или False CustomBuildAction - Позволяет запускать внешние приложения Windows на определенных этапах компиляции вашей программы Пример: #CustomBuildAction: 1, c:\windows\system32\attrib.exe, +r resources\*.* /s При этом на 1ом этапе папке resources внутри папки проекта вашей программы будет присвоен атрибут "Системный" Параметры: {id}, {app}, {args} Где id это этам компиляции вашей программы, app это внешнее приложение, в args это параметры запуска приложения Варианты id: 1 - До того как компилятор очистит папку objects (это происходит после того как B4A отпарсил код вашей программы). 2 - До того как компилятор генерирует файл R.java 3 - До того как пакет вашей программы будет подписан (на этом этапе ваш APK лежит здесь bin\temp.ap_) 4 - До того как APK вашей программы будет установлен на устройство 5 - После того как APK вашей программы будет установлен на устройство 6 - После компиляции Java кода вашей программы DebuggerDisableOptimizations - Позволяет отключать оптимизацию в отладчике B4A Пример: #DebuggerDisableOptimizations: True Возможные варианты: True или False DebuggerForceFullDeployment - Позволяет Rapid отладчик повторно развертывать весь проект при каждой компиляции и может быть полезно, если вы видите низкую производительность после изменения кода. Это так же отключит функцию быстрого повторного развертывания Rapid отладчика Пример: #DebuggerForceFullDeployment: True Возможные варианты: True или False DebuggerForceStandardAssets - Отключает функцию виртуальных ресурсов Rapid отладчика. По-дефолту Rapid отладчик не использует стандартную папку ресурсов. Это позволяет отладчику повторно развертывать только обновленные файлы Пример: #DebuggerForceStandardAssets: True Возможные варианты: True или False DesignerProperty - Позволяет для WYSIWYG редактора добавлять кастомные свойства вашей кастомной вьюшки из вашего модуля CustomView Class Пример: #DesignerProperty: Key: Param1, DisplayName: Параметр1, FieldType: Boolean, DefaultValue: True, Description: Пример Где Param1 это название параметра, Параметр1 это то как параметр будет называться в WYSIWYG, Boolean это тип параметра, True это дефолтное значение параметра, а Пример это описание вашего параметра в WYSIWYG. Возможные типы параметров FieldType: Boolean, Int, String, Color Event - Позволяет декларировать события для вашего класса. Сами события будут вызываться через CallSub/CallSubDelayed Пример: #Event: Kapec ( Result As String ) При этом для вашего класса будет задекларировано новое событие капец (Kapec) с наследуемым параметром Result типа String ExcludeFromLibrary - Позволяет исключать из компилируемой библиотеки (если проект вашей программы есть библиотека) тот модуль, где выставлен этот атрибут Пример: #ExcludeFromLibrary: True Возможные варианты: True или False ExcludeClasses - Позволяет исключать выбранные классы из подключенных JAR библиотек при компиляции вашей программы Пример: #ExcludeClasses: android.support.v7.recyclyerview При этом класс recyclyerview будет исключен ExcludeFromDebugger - Позволяет исключать из отладки тот модуль, где выставлен этот атрибут Пример: #ExcludeFromDebugger: True Возможные варианты: True или False Extends - Позволяет подключать сторонние SDK к вашей программе Пример: #Extends: android.support.v7.app.AppCompatActivity FullScreen - Позволяет делать активити вашей программы во весь экран (без Status) Пример: #FullScreen: True Возможные варианты: True или False IgnoreWarnings - Позволяет B4A игнорировать определенные уровни ошибок отладчика и парсера B4A Пример: #IgnoreWarnings: 1, 6, 10 Список уровней: 1: Unreachable code detected. 2: Not all code paths return a value. 3: Return type (in Sub signature) should be set explicitly. 4: Return value is missing. Default value will be used instead. 5: Variable declaration type is missing. String type will be used. 6: The following value misses screen units ('dip' or %x / %y): {1}. 7: Object converted to String. This is probably a programming mistake. 8: Undeclared variable '{1}'. 9: Unused variable '{1}'. 10: Variable '{1}' is never assigned any value. 11: Variable '{1}' was not initialized. 12: Sub '{1}' is not used. 13: Variable '{1}' should be declared in Sub Process_Globals. 14: File '{1}' in Files folder was not added to the Files tab.\nYou should either delete it or add it to the project.\nYou can choose Tools - Clean unused files. 15: File '{1}' is not used. 16: Layout file '{1}' is not used. Are you missing a call to Activity.LoadLayout? 17: File '{1}' is missing from the Files tab. 18: TextSize value should not be scaled as it is scaled internally. 19: Empty Catch block. You should at least add Log(LastException.Message). 20: View '{1}' was added with the designer. You should not initialize it. 21: Cannot access view's dimension before it is added to its parent. 22: Types do not match. 23: Modal dialogs are not allowed in Sub Activity_Pause. It will be ignored. 24: Accessing fields from other modules in Sub Process_Globals can be dangerous as the initialization order is not deterministic. 25: Sub '{1}' not found. ' Runtime warnings 1001: Panel.LoadLayout should only be called after the panel was added to its parent. 1002: The same object was added to the list. You should call Dim again to create a new object. 1003: Object was already initialized. 1004: FullScreen or IncludeTitle properties in layout file do not match the activity attributes settings. IncludeTitle - Позволяет показывать или скрывать Titlebar активити вашей программы Пример: #IncludeTitle: True Возможные варианты: True или False LibraryAuthor - Позволяет установить имя автора библиотеки (если проект вашей программы есть библиотека и вы хотите как-то себя идентифицировать как ее автора) Пример: #LibraryAuthor: c1cl0n LibraryName - Позволяет установить имя библиотеки (если проект вашей программы есть библиотека) Пример: #LibraryName: DVapi LibraryVersion - Позволяет установить версию библиотеки (если проект вашей программы есть библиотека) Пример: #LibraryVersion: 1.13 MultiDex - Позволяет компилятору разбивать DEX файл проекта на классы Пример: #MultiDex: True Возможные варианты: True или False Данный атрибут рекомендуется использовать только если компилятор ругается на Too many field references или Too many method references RaisesSynchronousEvents - Позволяет установить название подпрограмм вашего модуля класса котрым требуется синхронный вызов RiseEvent Пример: #RaisesSynchronousEvents: {имя_подпрограммы} Подробнее можно посмотреть на сайте разработчика SignKeyAlias SignKeyFile SignKeyPassword Эти три атрибута позволяют задать Alias, ключ и пароль к файлу для подписи вашей программы. Рекомендуется это делать через саму B4A (начиная с версии 8.0) StartAtBoot - Позволяет автоматически запускать сервисный модуль при запуске Android, где этот атрибут выставлен Пример: #StartAtBoot: True Возможные варианты: True или False StartCommandReturnValue - В ранних версиях B4A этот атрибут использовался для прикрепления сервисного модуля к таскеру, чтобы тот не выгружался самим Android и работал в фоновом режиме. В новых версиях этот атрибут не требуется Пример: #StartCommandReturnValue: android.app.Service.START_STICKY Подробнее можно посмотреть на сайте разработчика SupportedOrientations - Задание вариантов ориентации экрана устройства для вашей программы Пример: #SupportedOrientations: unspecified Возможные варианты: unspecified, landscape или portrait VersionCode VersionName Эти атрибуты задают версию вашей программы, пример: #VersionCode: 1 #VersionName: 1.0a
Чтобы наглядно продемонстрировать в каком порядке отрабатывают все штатные подпрограммы во время выполнения я добавил логирование в каждую из них и вот что получилось:
Таким образом выявляется что подпрограммы Globals где мы декларируем наши переменные в каждом из модулей отрабатывают первыми, затем создается и запускается сервисный модуль (если он есть в программе), затем отрабатывают локальные Global в активити программы, затем отрабатывают подпрограммы кастомной вьюшки, затем стандартный класс и только в самом конце отрабатывает создание активити. Вот таким нехитрым способом можно увидеть порядок исполнения подпрограмм всех модулей вашей программы
Для примера я создал в программе все виды модулей и в каждом из которых создал переменные двух типов Public и Private и подпрограмму Test
Модуль Activity:
Sub Process_Globals Public var1 As String Private var2 As String End Sub Sub Globals Public var3 As String Private var4 As String End Sub Sub Activity_Create Dim st As Standart st.var1 = "" var1 = var2 var3 = var4 Code.var1 = "" Dim cust As Custom cust.var1 = "" End Sub
Модуль кода:
Sub Process_Globals Public var1 As String Private var2 As String End Sub Sub Test var1 = var2 Main.var1 = "" Dim cust As Custom cust.var1 = "" End Sub
Модуль класса:
Sub Class_Globals Public var1 As String = "" Private var2 As String = "" End Sub Sub Test var1 = var2 Main.var1 = "" Code.var1 = "" Dim cust As Custom cust.var1 = "" End Sub
Модуль CustomView Class:
Sub Class_Globals Public var1 As String Private var2 As String End Sub Sub Test var1 = var2 Code.var1 = "" Main.var1 = "" Dim st As Standart st.var1 = "" End Sub
Модуль сервиса:
Sub Process_Globals Public var1 As String Private var2 As String End Sub Sub Test var1 = var2 Main.var1 = "" Code.var1 = "" Dim st As Standart st.var1 = "" Dim cust As Custom cust.var1 = "" End Sub
Таким образом видно что доступ к переменным Public есть из всех модулей (это и есть межмодульная связь), а доступ к переменным Private есть только внутри модуля. Кроме того, из модуля кода нет доступа в модуль стандартного класса. Этот недостаток реализуется следующим образом: в модуле кода создается подпрограмма с параметром типа Object для возврата нужных данных
Sub TestAsync(Callback As Object) CallSubDelayed2(Callback, "Reciever", "Hello world") End Sub
а из модуля класса обращение к подпрограмме делается так:
Code.TestAsync(Me) Wait For Reciever (RecievedData As String) Log(RecievedData)
Таким образом мы вызываем подпрограмму TestAsync и передаем ей в качестве параметра самого себя (экземпляр класса от куда и производится вызов), и ждем событие Reciever, в которое из модуля кода отправляется результат работы подпрограммы TestAsync
Практ.пример: Вбили в модуль кода подпрограмму которая производит некие математические расчеты (для примера - простая арифметика сложения). Назвали подпрограмму Podschet с входящими переменными Callback типа Object для принятия объекта возврата результата, и две переменные (а и б) типа Int (простые целые числа), которые мы будет суммировать и результат отправим в тот класс от куда нас вызвали
Модуль кода:
Sub Podschet(Callback As Object, a As Int, b As Int) CallSubDelayed2(Callback, "Reciever", a + b) End Sub
Модуль класса:
Sub Test Code.Podschet(Me, 1, 2) Wait For Reciever (Summa As Int) Log($"Сумма 1+2=${Summa}"$) End Sub
В B4A как и в Java существуют 8 примитивных (базовых) типов данных. Они служат основой для всех остальных типов данных. Они так же обладают фиксированным диапазоном значений
Базовые типы:
Byte (целые числа, размер = 1 байт). Переменные типа byte полезны при работе с потоком данных, который поступает из сети или файла. Диапазон допустимых значений: от -128 до 127. Объявление и инициализация переменных типа Byte: Dim Variable AsByte Variable = -128
Short (целые числа, размер = 2 байта). Диапазон допустимых значений: от -32768 до 32767. Объявление и инициализация переменных типа Short: Dim Variable AsShort Variable = -32768
Int (целые числа, размер = 4 байта). Тип int используется чаще при работе с целочисленными данными, нежели byte и short, даже если их диапазона хватает. Это происходит потому, что при указании значений типа byte и short в выражениях, их тип все равно автоматически повышается до int при вычислении. Диапазон допустимых значений: от -2147483648 до 2147483647. Объявление и инициализация переменных типа Int: Dim Variable AsInt Variable = -2147483648
Long (целые числа, размер = 8 байтов). Тип удобен для работы с большими целыми числами. Диапазон допустимых значений: от -9223372036854775808 до 9223372036854775807. Объявление и инициализация переменных типа Long: Dim Variable AsLong Variable = -9223372036854775808
Float (вещественные числа, размер = 4 байта). Удобен для использования, когда не требуется особой точности в дробной части числа. Диапазон допустимых значений: от ~1,4*10-45 до ~3,4*1038. Объявление и инициализация переменных типа Float: Dim Variable AsFloat Variable = -12.345
Double (вещественные числа, размер = 8 байтов). Математические функции такие как sin(), cos(), sqrt() возвращают значение double. Математические функции такие как sin(), cos(), sqrt() возвращают значение double. Диапазон допустимых значений: от ~4,9*10-324 до ~1,8*10308. Объявление и инициализация переменных типа Double: Dim Variable AsDouble Variable = 3.14159
Char (символ Unicode, размер = 2 байта). Cимвольный тип данных представляет собой один 16-битный Unicode символ. Он имеет минимальное значение 0 и максимальное значение 65535 включительно. Символы char можно задавать также при помощи соответствующих чисел. Например символ ‘Ы’ соответствует числу 1067. Объявление и инициализация переменных типа Char: Dim Variable AsChar Variable = "Ы"
Boolean (значение истина/ложь, размер = 1 байт). предназначен для хранения логических значений. Переменные этого типа могут принимать только одно из 2х возможных значений true или false. Объявление и инициализация переменных типа Boolean: Dim Variable AsBoolean Variable = True
String (значение любое текстовое). Тип String не является примитивным типом данных, однако это один из наиболее используемых типов в Java. String предназначен для хранения строк текста. Максимальная длина текстовой переменной типа String очень велика ~2^31 - 1 символов. Объявление и инициализация переменных типа String: Dim Variable AsString Variable = "Hello world"
Object (значение любое). Этот тип есть все виды и типы данных одновременно. Из него происходит все, от типов данных, до классов. В B4A это реализовано просто уникально. Объявление и инициализация переменных типа Object: Dim Variable AsObject Dim Variable2 AsString Variable = Variable2
Map (универсальное хранилище данных всех типов по принципу KeyValueStore). Некий аналог локальной базы данных. В качестве ключа и его значения принимает все типы данных. Объявление и инициализация переменных типа Map: Dim Variable AsMap Variable.Initialize Variable.Put("любимое число", 190733")
Арифметические функции: Возведение числа А в степень БPower(A, B) Квадратный корень числаSqrt(число)
Тригонометрические функции: Синус от радиантаSin(радиант) Синус от градусаSinD(градус) Косинус от радиантаCos(радиант) Косинус от градусаCosD(градус) Тангенс от радиантаTan(радиант) Тангенс от градусаTanD(градус) Котангенс от радиантаATan(радиант) Котангенс от градусаATanD(градус)