# B4X

B4X ist eine Gruppe von Entwicklungsumgebungen für Rapid Application Development (RAD). B4X wird vom Unternehmen Anywhere Software entwickelt und vertrieben. Mit diesen Entwicklungsumgebungen können native Anwendungen für Android, iOS, Java und Arduino erstellt werden. Die Programmiersprache kann in die Familie der BASIC-Dialekte eingeordnet werden und orientiert sich stark an Visual Basic. Während die klassische Variante von Visual Basic nur auf Microsoft-Produkte ausgerichtet war, decken die B4X-Entwicklungsumgebungen mehrere unterschiedliche Betriebssysteme und Endgeräte ab. Je nach Zielplattform werden unterschiedliche Entwicklerwerkzeuge und Klassenbibliotheken zur Verfügung gestellt. Beispielsweise wird ein grafischer WYSIWYG-Formulareditor nur für die Plattformen Android, iOS und Java angeboten.

## Entwicklungsumgebungen

Derzeit umfasst die B4X-Familie vier Entwicklungsumgebungen für Java (B4J), Android (B4A), iOS (B4i) und Arduino (B4R). Früher gab es noch eine IDE für Microsoft Pocket PC (Basic4ppc). Die Entwicklungsumgebungen für Android, Java und Arduino stehen im vollen Funktionsumfang kostenlos zur Verfügung. Es ist jedoch möglich, die Entwicklung durch freiwillige Spenden zu unterstützen. Kostenpflichtig ist lediglich die Entwicklungsumgebung für iOS. Sofern man nicht über einen eigenen Mac-Computer verfügt, fällt zusätzlich eine jährliche Gebühr für einen Cloud-basierten Dienst zur Kompilierung der Apps an. Für die Entwicklungsumgebungen aus der B4X-Familie werden keine Compiler mitgeliefert. Für B4J, B4A und B4i muss auf den Java-Compiler aus einem installierten Java Development Kit (JDK) verwiesen werden. In B4R muss auf das Hauptprogramm der Arduino IDE verwiesen werden.

### B4A

Mit B4A kann man Java-Apps für Android erstellen. Die bereitgestellten Bibliotheken umfassen unter anderem Komponenten für grafische Benutzeroberflächen, Klassen zum Zugriff auf Hardwarekomponenten (z. B. Digitalkameras oder GPS), Netzwerkkommunikation, Google-Play-Dienste und JSON.

### B4J

Mit B4J kann man Apps erstellen, die innerhalb einer Java VM ausgeführt werden können. Da für fast alle Betriebssysteme eine Java-Distribution existiert, lassen sich die Apps plattformunabhängig verbreiten. Es werden unter anderem diverse Bibliotheken zur Programmierung von grafischen Benutzeroberflächen, Netzwerkkommunikationen, JSON und Verarbeitung von Office Dateien angeboten. Mit Hilfe der optionalen Java-Bibliothek Pi4J lassen sich auch Apps für den Raspberry Pi entwickeln, welche direkt auf die Hardwarekomponenten zugreifen können. Für die Entwicklung von grafischen Benutzeroberflächen wird intern auf JavaFX und das XUI (B4X User Interface) Framework zurückgegriffen. Seit der Version 9.50 wird B4J nur noch als 64-Bit-Version angeboten.

### B4i

Mit B4i lassen sich Apps für iPhones und iPads programmieren. Es ist die einzige Entwicklungsumgebung aus der B4X-Gruppe, welche kostenpflichtig ist. Außerdem wird ein kostenpflichtiger Dienst angeboten, um Apps für iOS online zu kompilieren, ohne selbst einen Mac zu besitzen.

### B4R

Mit B4R kann man Software für Arduino-Boards erstellen. Es werden in erster Linie Klassen zur Steuerung von ESP-Chips angeboten. Anders als bei den anderen Entwicklungsumgebungen der B4X-Gruppe, werden keine Werkzeuge und Bibliotheken angeboten, mit denen man eine grafische Benutzeroberfläche erstellen kann.

### Basic4ppc

Mit dieser Entwicklungsumgebung lassen sich sowohl klassische Anwendungen für Desktop-Computer mit dem Betriebssystem Microsoft Windows als auch Apps für Pocket PCs, auf denen das Betriebssystem Windows Mobile installiert ist, erstellen. Es werden Komponenten und Klassen bereitgestellt, die intern auf Funktionen des .Net-Frameworks bzw. des .NET Compact Frameworks zurückgreifen. Diese Entwicklungsumgebung steht nicht länger zur Verfügung.

## Eigenschaften der Programmiersprache

Bei B4X handelt es sich um eine imperative Programmiersprache, welche nur partiell objektorientiert ist.

### Klassen

Ähnlich wie in Visual Basic gibt es in B4A, B4i und B4J Code- und Klassen-Module. Code-Module enthalten Methoden, die innerhalb des Programms global aufgerufen werden können. B4R unterstützt nur Code-Module. In B4A existieren zusätzlich noch Service-Module. Klassen-Module dienen zur objektorientierten Programmierung und repräsentieren genau eine Klasse. Im Gegensatz zu anderen Programmiersprachen unterstützen Klassen in B4X keine Vererbung und Methoden können weder überschrieben noch überladen werden. In den mitgelieferten Klassen werden deshalb Methoden mit gleichem Verhalten, aber unterschiedlicher Signatur oft durchnummeriert.
Variablen, Konstanten und Methoden besitzen sowohl in Code- als auch in Klassen-Modulen eine Sichtbarkeit (Private oder Public).

### Variablen

Während man in vielen BASIC-Dialekten die Deklaration von Variablen mit Hilfe von Option Explicit vorschreiben kann, müssen Variablen in B4X generell nicht deklariert werden. Die Größe von Datenfeldern (Arrays) kann nach der Deklaration nicht mehr vergrößert werden, da es auch hier im Gegensatz zu anderen BASIC-Dialekten, keinen ReDim Befehl gibt. Dynamisch wachsende Datenfelder können jedoch mit Listen realisiert werden. Zudem fehlen in B4X im Gegensatz zu den meisten BASIC-Dialekten die typischen Funktionen zur expliziten Typumwandlung (z. B. CInt, CDbl oder CStr).
Das Beispiel zeigt einen Ausschnitt aus einem simplen Taschenrechner. Wenn der Benutzer die Schaltfläche „Plus“ (btnAdd) anklickt, wird geprüft, ob in den beiden Eingabefeldern (txtNum1 und txtNum2) eine gültige Zahl eingegeben wurde. Ist das der Fall, so werden die Werte der beiden Eingabefelder addiert und das Resultat in einem weiteren Textfeld (txtResult) ausgegeben. Hierbei werden die Texteingaben implizit in einen numerischen Datentyp umgewandelt und das Ergebnis der Addition wiederum implizit in einen Text umgewandelt. Sollte in mindestens einem Eingabefeld keine gültige Zahl stehen, wird ein kleines Dialogfenster mit einer Fehlermeldung angezeigt. Als Dezimaltrennzeichen muss in der Eingabe ein Punkt verwendet werden.

### Subroutinen (Sub)

In den meisten BASIC-Sprachen gibt es zwei Arten von Methoden: Funktionen (Function) sind Methoden, die einen Wert zurückgeben und Subroutinen (Sub), welche keinen Wert zurückgeben. In B4X gibt es diese Unterscheidung nicht mehr. Hier gibt es nur noch Subroutinen, welche einen Wert zurückgeben können, aber nicht müssen. Im Gegensatz zu B4R, können Subroutinen in B4A, B4i und B4J pausiert werden, ohne den gerade ausgeführten Thread zu blockieren. Wie in vielen anderen Programmiersprachen, können Subroutinen und deren Parameter über einen Kommentar unmittelbar oberhalb der Deklaration dokumentiert werden. Das Prinzip ist vergleichbar mit Javadoc oder den XML-Kommentaren aus dem .NET Framework.

### Präprozessor-Direktiven

In B4A, B4i und B4J ist es über die Präprozessor-Direktive #if JAVA möglich, nativen Java-Code in ein B4X-Programm einzubinden. Es ist also möglich, einzelne Code-Fragmente in Java zu schreiben und diese aus dem B4X-Code heraus zu nutzen. Zudem können über die Direktiven #if B4A, #if B4i und #if B4J einzelne Code-Abschnitte je nach Zielplattform anders implementiert werden. Analog ist es in B4R über die Präprozessor-Direktive #if C möglich, nativen C-Code in ein B4R-Programm einzubinden.

### Layouts

Apps für die Plattformen Android, iOS und Java können eine grafische Benutzeroberfläche (GUI) besitzen. Um diese zu entwerfen, wird von B4A, B4i und B4J ein WYSIWYG Formulareditor angeboten.

### Bibliotheken

Code- und Klassen-Module können projektübergreifend in eine Bibliothek exportiert werden. Dabei handelt es sich um ein ZIP-Archiv mit der Dateiendung b4xlib. Darin können mehrere Module, Layout-Dateien und eine Manifest-Datei enthalten sein. In der Manifest-Datei können Versionsinformationen und Abhängigkeiten angegeben werden.

## Einsatzgebiete

Laut dem Geschäftsführer Erel Uziel, werden die Entwicklungsumgebungen der B4X-Familie weltweit von Firmen, Organisationen, Bildungseinrichtungen und Privatpersonen eingesetzt. Für Bildungseinrichtungen und unerfahrene Programmierer werden Lehrmaterialien und eine umfangreiche Turtle-Bibliothek angeboten, mit der Algorithmen grafisch dargestellt werden können. Zu den Geschäftskunden gehört unter anderem auch die NASA, welche B4A in einem Projekt zur Fernsteuerung und Überwachung von faseroptischen Sensoren eingesetzt hat. Eine der Anforderungen war auch hier eine minimale Lernkurve. Als Partner werden neben der NASA auch die Unternehmen IBM, Hewlett Packard, Honda, Bosch und Adobe genannt.

## Popularität

B4X ist eine wenig verbreitete Programmiersprache. Bis einschließlich Februar 2022 zählte sie im TIOBE-Index dennoch zu den Top 100 der populärsten Programmiersprachen. Im PYPL (PopularitY of Programming Language) – Index der 30 populärsten Programmiersprachen wird B4X nicht aufgelistet. Beide Indizes dienen zur Messung der Popularität von Programmiersprachen. Allgemein betrachtet ist die Relevanz der BASIC-Dialekte (Visual Basic .NET, Visual Basic, VBScript und VBA) in den letzten Jahren relativ stabil geblieben.

## Alternativen

Die B4X-Entwicklungsumgebungen sollen Programmieren eine Möglichkeit bieten, plattformübergreifende Apps in einer Programmiersprache zu entwickeln, die sich stark an Visual Basic orientiert. Im Fokus stehen dabei mobile Endgeräte mit dem Betriebssystem Android oder iOS. Neben B4X verfolgen auch andere Projekte ähnliche Ziele.

### KBasic bzw. Basic For Qt

Eine Alternative für die plattformübergreifende Programmierung von Windows-, Linux- und macOS-Apps stellt KBasic bzw. dessen Nachfolger Basic For Qt dar. Anders als bei B4X, werden von Basic For Qt keine Betriebssysteme für mobile Endgeräte unterstützt. Während die B4X-Entwicklungsumgebungen XUI bzw. JavaFX für grafische Benutzeroberflächen verwenden, nutzt Basic For Qt (wie der Name bereits andeutet) das Qt Framework. Für die Zielplattform Linux fallen keine Kosten an, Apps für die Zielplattformen Windows und macOS sind jedoch kostenpflichtig. Die letzte Version dieser Entwicklungsumgebung wurde im Sommer 2012 veröffentlicht.

### Xojo

Xojo (ehemals REALbasic) ist eine kostenpflichtige objektorientierte Programmiersprache, welche 2016 mit dem BIG Innovation Award ausgezeichnet wurde. Ähnlich wie B4X wurde Xojo bis Februar 2022 im TIOBE-Index zu den Top 100 der populärsten Programmiersprachen gezählt. Derzeit ist Xojo weder im TIOBE- noch im PYPL-Index vertreten. Die Programmiersprache orientiert sich an Visual Basic 6. Mit Xojo lassen sich plattformübergreifende Apps für macOS, Windows, Linux, Webserver, iOS und Raspberry Pi entwickeln. Auch hier wird ein eigener macOS-Computer benötigt, um Programme für Apple Zielplattformen kompilieren zu können.

## Vor- und Nachteile von B4X
### Vorteile

* B4A, B4J und B4R sind kostenlos.
* Die Programmiersprache ist verhältnismäßig einfach und schnell zu erlernen.
* Für B4A, B4i und B4J existieren Lernmaterialien und eine Turtle-Bibliothek zur Visualisierung von Algorithmen.
* Mit B4X lassen sich relativ einfach Anwendungen für Arduino- und Raspberry Pi programmieren.
* Die B4X-Entwicklungsumgebungen generieren native Anwendungen.

### Nachteile

* Die Möglichkeiten zur objektorientierten Programmierung sind sehr begrenzt.
* Die Entwicklungsumgebungen der B4X Familie stellen derzeit keine Werkzeuge zur grafischen Modellierung von Softwarearchitekturen zur Verfügung. Damit verbunden ist auch Reverse-Engineering (also die Generierung eines visuellen Modells aus bestehendem Quellcode) derzeit nicht möglich. (Stand: März 2022)