B4J Question B4J v9.10 BETA is available for download


B4X founder
Staff member
Licensed User
Longtime User
It has been a while since the B4X language itself received new features. This update adds two new language features:

- IIf - Inline If, also called ternary if as it is an operator with three arguments.
Label1.Text = IIf(EditText1.Text <> "", EditText1.Text, "Please enter value")
IIf is mostly equivalent to this sub:
Sub PseudoIIf (Condition As Boolean, TrueValue As Object, FalseValue As Object) As Object
 If Condition = True Then Return TrueValue Else Return FalseValue
End Sub
Unlike this sub, the IIf keyword will only evaluate the relevant expression. This means that this code will work properly:
Return IIf(List1.Size > 0, List1.Get(0), "List is empty")

(There is another minor difference related to the return type. If it is set explicitly with the new As method, the compiler will avoid casting the values to Object and back to the target type. This is only significant in very tight and long loops).

- As - Inline casting. Allows inline casting from one type to another. Some examples:
Dim Buttons As List = Array(Button1, Button2, Button3, Button4, Button5)
Dim s As String = Buttons.Get(2).As(B4XView).Text
Buttons.Get(2).As(B4XView).Text = "abc"
Dim j As String = $"{
data: {
key1: value1,
complex_key2: {key: value2}
items: [0, 1, 2]

Dim parser As JSONParser
Dim m As Map = parser.NextObject
Dim value1 As String = m.Get("data").As(Map).Get("key1")
Dim value2 As String = m.Get("data").As(Map).Get("complex_key2").As(Map).Get("key")
Dim FirstItemInList As String = m.Get("items").As(List).Get(0)
For Each item As Int In m.Get("items").As(List)

Button1.As(JavaObject).RunMethod("setMouseTransparent", Array(True))
It can also be used with numbers, which is especially useful when calling external APIs with JavaObject, as the types need to be exact:
Log(Me.As(JavaObject).RunMethod("sum", Array((10).As(Float), (20).As(Double))))
'equivalent to:
Dim jme As JavaObject = Me
Dim f As Float = 10
Dim d As Double = 20
Log(jme.RunMethod("sum", Array(f, d)))

#if Java
public double sum(float n1, double n2) {
return n1 + n2;
#End If

This update also makes it possible to define custom class templates inside b4xlibs. You can see an example in B4XPages.b4xlib. With this feature, it will be possible to add B4XPages classes in B4i.
B4i update with these features and more will be released next week.

Download link:


Licensed User
Longtime User
I thought B4J meant "Basic for Java", since the language syntax IS Basic. B4A is Basic for Android, and so on. B4X means Basic for anything. But it should be simple to find it out, Erel will know the answer to a great degree of certainty.
Yes, it is as you wrote; B4X term was born after "Basic for Android", "Basic for..."
Upvote 0


Active Member
Licensed User
Longtime User
Wikipedia says, "According to Steve Jobs, the "i" word in "iMac" (and therefore "iPod", "iPhone" and "iPad") stands for internet, individual, instruct, inform, and inspire."
So B4I is:
Beginners' All-purpose Symbolic Instruction Code for Internet, individual, instruct, inform, and inspire phone operating system.
Upvote 0