一、数学函数(28个)
|
| 详见:B4X编程语言:B4X关键字之数学函数(28个) |
二、字符及字符串转换类函数(8个)
|
1、Asc
|
Asc (Char As Char) As Int
返回给定字符或字符串中的第一个字符的unicode代码点(编码值)。
Asc("a") = 97 ;Asc("abcd")= 97 |
2、BytesToString
|
BytesToString (Data() As Byte, StartOffset As Int, Length As Int, CharSet As String) As String
将给定的字节数组Data()解码为字符串。
Data:字节数组。
StartOffset:要读取的第一个字节索引。
Length:要读取的字节长度。
CharSet:字符集的名称。
例如:
Dim s As String
s = BytesToString(Buffer, 0, Buffer.Length, "UTF-8") |
3、CharsToString
|
CharsToString (Chars() As Char, StartOffset As Int, Length As Int) As String
通过从字符数组Chars()中复制字符来创建一个新的字符串。
复制从StartOffset(起始位置索引)开始,复制的字符数等于Length。
Dim s As String
Dim char1() As Char=Array As Char("a","b","c","d","e","f","g","h")
s = CharsToString(char1,2,char1.Length-2)
Log(s) '输出:cdefgh |
4、Chr
|
| Chr (UnicodeValue As Int) As Char |
返回由给定 unicode 值表示的字符。
Chr(65)="A" ;Chr(97)="a" |
5、SmartStringFormatter
|
SmartStringFormatter (Format As String, Value As Object) As String
返回智能字符串文字所使用的内部关键字。 |
6、CRLF
|
CRLF As String
换行符,返回Chr(10)的值 |
7、QUOTE
|
QUOTE As String
引号字符“。返回 Chr(34) 的值。 |
8、TAB
|
TAB As String
TAB字符,返回Chr(9)的值。 |
三、数字格式化函数(2个)
|
1、NumberFormat
|
NumberFormat (Number As Double, MinimumIntegers As Int, MaximumFractions As Int) As String
将指定的数字转换为指定格式的字符串。
Number:要转换的数字,双精度型。
MinimumIntegers:最小保存的整数位数,假如小于等于Number的整数位数,则忽略;假如大于Number的整数位数,则在Number前面用0补足,直至Number的整数位数和MinimumIntegers相称。
MaximumFractions:最大保存的小数位数,假如大于等于Number的小数位数,则忽略;假如小于Number的小数位数,则对小数部门四舍五入,保存MaximumFractions位小数。
Log(NumberFormat(12345.6789, 0, 2)) 输出:'"12,345.68"
Log(NumberFormat(1, 3 ,0)) 输出:'"001"
NumberFormat默认返回的数字字符串带有千位符,可以使用Replace函数去掉千位符:
Log(NumberFormat(12345.6789, 0, 2).Replace(",","")) 输出:'"12345.68" |
2、NumberFormat2
|
NumberFormat2 (Number As Double, MinimumIntegers As Int, MaximumFractions As Int, MinimumFractions As Int, GroupingUsed As Boolean) As String
Number:要转换的数字,双精度型。
MinimumIntegers:最小保存的整数位数,假如小于等于Number的整数位数,则忽略;假如大于Number的整数位数,则在Number前面用0补足,直至Number的整数位数和MinimumIntegers相称。
MaximumFractions:最大保存的小数位数,假如大于等于Number的小数位数,则忽略;假如小于Number的小数位数,则对小数部门四舍五入,保存MaximumFractions位小数。
MinimumFractions:最少保存的小数位数,假如小于等于Number的小数位数,则忽略;假如大于Number的小数位数,则在Number的小数后面用0补足,直至Number的小数位数和MinimumFractions相称。
GroupingUsed:确定是否对每三个整数举行分组,也就是是否使用千位符。True:使用,False:不使用。
Log(NumberFormat2(12345.67, 0, 3, 3, False)) ' 输出:"12345.670"
Log(NumberFormat2(12345.67, 0, 3, 3, True)) ' 输出:"12,345.670" |
四、日志 记录函数(2个)
|
1、Log
|
Log (Message As String)
向日志 记录输出一条Message信息记录。可以在 Logs 选项卡中检察日志 。
Message:字符串信息,可以是字符串,可以是输出字符串的函数或表达式。
Log(DateTime.Date(DateTime.now)) ' 输出:"12/20/2024" |
2、LogColor
|
LogColor (Message As String, Color As Int)
向日志记录输出一条Message信息记录。信息的字体颜色为Color。
LogColor(DateTime.Date(DateTime.now),xui.Color_Red) ' 输出:"12/20/2024" |
五、位图加载函数(3个)
|
| 这三个关键字仅用于B4A,假如在B4J加载位图,请使用XUI或JFX |
1、LoadBitmap
|
LoadBitmap (Dir As String, FileName As String) As Bitmap
加载位图。Dir是位图所在文件夹,FileName是位图文件名称。
请注意,安卓文件系统是区分大小写的。
假如图像大小很大,您应该考虑使用LoadBitmapSample加载。
图像存储文件的大小和实际图像大小关系不大,因为图像通常是压缩存储的。
Activity.SetBackgroundImage(LoadBitmap(File.DirAssets, "SomeFile.jpg")) |
2、LoadBitmapResize
|
LoadBitmapResize (Dir As String, FileName As String, Width As Int, Height As Int, KeepAspectRatio As Boolean) As Bitmap
加载位图并设置其大小。位图比例将与装备比例相同。
Dir:位图所在文件夹。FileName:位图文件名称。
Width:设置的位图宽度,Height:设置的位图高度。
KeepAspectRatio:是否保持宽高比。True为保持,False为不保持。
与需要将容器 Gravity 设置为 FILL 的 LoadBitmapSample 不同,当 Gravity 设置为 CENTER 时,LoadBitmapResize 提供更好的结果。例如:
Dim bd As BitmapDrawable = Activity.SetBackgroundImage(LoadBitmapResize(File.DirAssets, "SomeFile.jpg", 100%x, 100%y, True))
bd.Gravity = Gravity.CENTER
大概:
Activity.SetBackgroundImage(LoadBitmapResize(File.DirAssets, "SomeFile.jpg", 100%x, 100%y, True)).Gravity = Gravity.CENTER |
3、LoadBitmapSample
|
LoadBitmapSample (Dir As String, FileName As String, MaxWidth As Int, MaxHeight As Int) As Bitmap
加载位图。Dir:位图所在文件夹。FileName:位图文件名称。MaxWidth/MaxHeight:加载后的最大宽度/高度。
假如 MaxWidth 或 MaxHeight 小于位图尺寸,解码器将对位图举行二次采样。这可以在加载大图像时节省大量内存。
Panel1.SetBackgroundImage(LoadBitmapSample(File.DirAssets, "SomeFile.jpg", Panel1.Width, Panel1.Height)) |
六、测试函数(3个)
|
1、Is
|
Is Name As Type As Booleann
测试对象是否属于给定类型Name。常用于遍历对象。
请注意,当数字转换为对象时,它可能会将其类型更改为不同类型的数字
(例如,Byte 可能会转换为 Int)。
For Each v As B4XView In Pane1
If v Is Button Then
v.Color=xui.Color_Cyan
End If
Next |
2、IsNumber
|
IsNumber (Text As String) As Boolean
测试指定的字符串Text是否可以安全地解析为数字。
If IsNumber(TextField1.Text.Trim)=False Then
xui.MsgboxAsync("需要输入数值型数据!","提示")
TextField1.RequestFocus
Return
End If |
3、SubExists
|
SubExists (Object As Object, Sub As String) As Boolean
测试对象Object是否包罗指定的子例程Sub。
Object:是指可能包罗该Sub的类模块、B4XPage、Activity等模块级别的对象的名称。
Sub:要检测是否存在的子程序名称。
假如对象未初始化或不是用户类的实例,则返回 false。
SubExists(Me,"Button1_Click") 测试当前模块是否包罗Button1_Click子例程。
SubExists(test1,"CreateMap") 测试名称为test1的模块是否包罗CreateMap子程序。 |
七、子程序创建及调用命令(7个)
|
1、Sub
|
Sub Name [(List of Parameters)] [As Return-Type]
声明(创建)一个子程序(例程),可以使用参数和返回值,代码以End Sub为结尾行。
Name:要声明(创建)的子程序(例程)名称,一般按B4X子例程定名规则定名,也可以按自己的意图自定义定名。
List of Parameters:一个或多个参数列表,参数应包括参数名称和类型,如是数组,括号内不写数组维度和大小。
Return-Type:返回值的类型,可以是任何类型,如是数组,括号内不写数组维度和大小(因声明的是数据类型而不是成员)。
可以不使用参数和返回值,这种情况下,该子程序就是一段纯粹的分支子程序代码,调用时作为分支程序流执行后返回。
使用了参数,调用时要向此子程序传递相干参数。
使用了返回值,我们在调用此子例程时可得到返回数据,但在子程序代码末端要使用Return返回指定类型的数据值。
Sub MySub (Name As String, Age As Int, OtherValues() As Double) As Boolean
Dim a As Int=0
For Each n As Double In OtherValues
If n<60 Then
a=1
Exit
End If
Next
Return IIf(Name.IndexOf("李")>=0 And Age<20 And a=0,True,False)
End Sub |
2、CallSub
|
CallSub (Component As Object, Sub As String) As Object
调用给定的子程序(例程)。
Component:组件或模块名称。Sub:子程序(例程)名称。
CallSub 调用当前模块中的子程序时,将 Me 作为组件传递。
CallSub 也可调用属于不同模块的子程序。但只有在其他模块没有暂停时才会调用。 如该模块暂停,将返回一个空字符串。
您可以使用 IsPaused 来测试模块是否已暂停。
在B4A中,一个Activity不能调用不同Activity的子程序。 因为当前Activity启动后,其他Activity肯定会暂停。
CallSub 答应Activity调用子程序或服务调用Activity子程序。但不能调用代码模块的子程序。
示例:CallSub(Main, "RefreshData") |
3、CallSub2
|
CallSub2 (Component As Object, Sub As String, Argument As Object) As Object
雷同于 CallSub。 使用单个参数调用 sub。Sub子程序只使用了一个参数时可使用此方法调用。
例如:有一个子程序如下:
Sub mysub(x As Int)
Log(x)
End Sub
我们可以有以下几种调用方法:
mysub(3) '只能在mysub所在模块调用。
CallSub(Me,mysub(3))
CallSub2(Me,"mysub",3) |
4、CallSub3
|
CallSub3 (Component As Object, Sub As String, Argument1 As Object, Argument2 As Object) As Object
雷同于 CallSub2。 使用两个参数调用 sub。Sub子程序只使用了两个参数时可使用此方法调用。 |
5、CallSubDelayed
|
CallSubDelayed (Component As Object, Sub As String)
CallSubDelayed 是 StartActivity,StartService 和 CallSub 的组合。
与仅实用于当前正在运行的组件的 CallSub 不同,CallSubDelayed 将在需要时首先启动目的组件。
CallSubDelayed 也可以用于调用当前模块中的子程序。 不是直接调用这些子程序,而是将一条消息发送到消息队列。
处理惩罚消息时将调用子程序。 这在您想要在当前子程序“之后”执行某些操作(通常与 UI 事件相干)的情况下很有用。
请注意,假如您在整个应用程序处于后台(没有可见运动)时调用 Activity,则一旦目的运动恢复,子程序将被执行。
下面有两个子程序:
Sub MySub
Log("用CallSubDelayed调用了我!")
End Sub
Sub MySub1
Log("在CallSubDelayed之后用CallSub调用了我!")
End Sub
我们用两行语句分别调用这两个子程序:
CallSubDelayed(Me,"mysub")
CallSub(Me,"mysub1")
日志记录表现:mysub1运行完毕后才运行mysub。 |
6、CallSubDelayed2
|
CallSubDelayed2 (Component As Object, Sub As String, Argument As Object)
雷同于 CallSubDelayed。 使用单个参数调用子程序。Sub子程序只使用了一个参数时可使用此方法调用。 |
7、CallSubDelayed3
|
CallSubDelayed3 (Component As Object, Sub As String, Argument1 As Object, Argument2 As Object)
雷同于 CallSubDelayed。 使用两个参数调用子程序。Sub子程序只使用了两个参数时可使用此方法调用。 |
八、条件选择语句(3个)
|
1、If
|
开启条件判定,根据判定结果引导程序流。
①单个条件判定:
If condition Then
条件为真时执行的语句
[Else
条件为假时执行的语句
End If
单个条件判定也可以用单行代码写:If condition Then 条件为真时执行的语句 [Else 条件为假时执行的语句]
②多个条件判定:
If condition Then
statement
Else If condition Then
statement
...
Else
statement
End If |
2、IIf
|
IIf (Condition As Boolean, TrueValue As Object, FalseValue As Object)
内联If -假如条件为True,返回TrueValue表达式的结果,否则返回FalseValue表达式的结果。
Dim s As String = IIf(Age>18,"成年","未成年") |
3、Select
|
比较单个值和多个值,常用于对程序或控件返回的值的多种可能性举行判定,根据不同的值执行不同的语句。一般情况下将返回的值声明为一个变量,用Case来分析可能的值。完整的Select语句以Select开头,End Select结尾,中间用Case判定。
例如:我们定义一个多个按钮的点击事件,根据按钮的Tag来分辨点击了哪个按钮:
Sub btn_Click
Dim b As Button=Sender
Dim tag As String=b.Tag
Select tag
Case "btn1"
点击btn1执行的语句
Case "btn2"
点击btn2执行的语句
Case "btn3"
点击btn3执行的语句
...
End Select
End Sub |
九、循环语句(3个)
|
1、For
|
For variable = value1 To value2 [Step interval]
...
Next
假如迭代器变量没有提前声明,那么它将是Int类型。省略步长隔断Step interval,则默认步长为1。
大概:
For Each variable As type In collection
...
Next
示例:
For i = 1 To 10
Log(i) '将打印1到10(包括1和10)。
Next
For Each n As Int In Numbers '数组
Sum = Sum + n
Next |
2、Until
|
Do Until condition
...
Loop
循环直到条件condition为真时结束。 |
3、While
|
Do While condition
...
Loop
当条件condition为真时举行循环。 |
十、命令行语句(6个)
|
1、Continue
|
停止执行当前的迭代,并继承执行下一个迭代。
Dim n As Int=2
Do While n<10
n=n+1
If n=3 Or n=5 Then
Continue
End If
Log(n)
Loop |
2、Dim
|
声明单个变量:Dim variable name [As type] [= expression]
声明多个变量:Dim [Const] variable1 [= expression], variable2 [= expression], ..., [As type]
声明数组:Dim variable(Rank1, Rank2, ...) [As type]
例如:
Dim n As Int=2
Dim a=1,b=2,c=3 As Int
Dim a1=1 As Int,b1="study" As String,c1=10 As Double
Dim Days(7) As String
注意:用Dim声明的变量是公共变量(全局变量) |
3、Exit
|
退出最内部的循环。请注意,在 Select 块内退出将退出 Select 块。
假如只有一个循环体(循环内没有循环),则退出该循环。 |
4、Return
|
Return [value]
从当前sub返回,并可选择返回给定的值。
假如Sub设置了返回值,则需要Return value。 |
5、Sleep
|
Sleep (Value As Double) As Double
暂停当前过程的执行,并在指定时间Value后恢复。Value是以毫秒为单元的时间长短。 |
6、Type
|
Type type-name (field1, field2, ...)
声明一个布局,也就是类型变量。字段包括字段名称和类型。只能在 Sub_Globals 或 Sub Process_Globals 中使用。 |
Type MyType (Name As String, Items(10) As Int)
Dim a, b As MyType
a.Initialize
a.Items(2) = 123 |
十一、捕获异常语句(2个)
|
1、Catch
|
在 Try 块中抛出的任何异常都将在 Catch 块中被捕获。调用 LastException 以获取捕获的异常。
Try
...
Catch
...
End Try
示例:
Try
Dim list1 As List=Array As String("a","b")
list1.Add("c")
Catch
Log(LastException) '输出:(UnsupportedOperationException) java.lang.UnsupportedOperationException
End Try |
2、Try
|
在 Try 块中抛出的任何异常都将在 Catch 块中被捕获。调用 LastException 以获取捕获的异常。
Try
...
Catch
...
End Try |
十二、别的关键字(10个)
|
1、Array
|
Array [As type] (list of values)
创建指定类型的单维数组。假如省略了类型,则将创建一个对象数组。
Dim Days() As String
Days = Array As String("Sunday", "Monday", ...) |
2、CreateMap
|
CreateMap (key1: value1, key2: value2, ...)
使用给定的键/值对创建一个映射。
Dim m As Map = CreateMap("January": 1, "February": 2) |
3、False
|
| False As Boolean |
4、GetType
|
GetType (object As Object) As String
返回一个表示对象object的java类型的字符串。
Log(GetType(Button1)) '输出:javafx.scene.control.Button |
5、Me
|
| Me As Object |
对于类:返回对当前实例的引用。
对于运动和服务:返回一个对象的引用,可以用于CallSub, CallSubDelayed 和 SubExists 关键字。
不能在代码模块中使用。 |
6、Not
|
Not (Value As Boolean) As Boolean
反转给定的布尔值的值。
Private Sub Button1_Click
CheckBox1.Checked=Not(CheckBox1.Checked)
End Sub |
7、Null
|
| Null As Object |
8、Regex
|
Regex As Regex
与正则表达式相干的方法。
Log(Regex.IsMatch("a..","abc")) '输出:True
Log(Regex.IsMatch("ab*c","abbbbc")) '输出:True |
9、Sender
|
Sender As Object
返回引发该事件的对象。仅在该事件例程中有用。例如:
Sub Button_Click
Dim b As Button
b = Sender
b.Text = "I've been clicked"
End Sub |
10、True
|
| True As Boolean |
|