ArkTS 函数基础与综合实战:从声明语法到九九乘法表

引言

函数是代码组织的基本单元,能够将完成特定任务的代码打包复用,提高代码的可重用性。本节课将深入学习 ArkTS 中函数的声明语法、参数分类、返回类型与作用域等核心概念,并通过打印九九乘法表的实战案例,串联巩固变量、运算符、循环语句等已学知识点。

核心内容

函数基础定义与声明语法

函数是将多条语句组合在一起、用于实现特定功能且可重复调用的代码块。其核心作用是提高代码可重用性,避免重复编写相同功能的代码。

在 ArkTS 中,通过function关键字声明函数,完整语法结构为:

function 函数名(参数列表): 返回类型 { 函数体 }

声明时需要向编译器明确告知:函数名称、参数信息、返回类型和执行内容。

函数参数分类与语法规则

必选参数(普通参数)

调用函数时必须传入的参数,缺省则编译器报错。语法格式为参数名: 类型,必须显式传递,不能省略。

function makeMilkTea(flavor: string, sweetness: string): string { return `一杯${sweetness}的${flavor}奶茶`; } // 调用时必须传入两个参数 makeMilkTea('草莓', '半糖');
可选参数

允许调用时省略不传的参数,未传值时参数值为undefined。语法格式为参数名?: 类型,在参数名后、类型冒号前加?标识。

function makeMilkTea(flavor: string, sweetness?: string): string { const sweet = sweetness || '全糖'; return `一杯${sweet}的${flavor}奶茶`; } // 只传必选参数也可正常调用 makeMilkTea('草莓');
默认参数

声明时可指定参数默认值,调用未传值时自动使用默认值。语法格式为参数名: 类型 = 默认值

function makeMilkTea(flavor: string, sweetness: string = '全糖'): string { return `一杯${sweetness}的${flavor}奶茶`; } // 不传甜度时默认使用"全糖" makeMilkTea('草莓');
剩余参数

用于接收数量不定的同类参数,自动将传入的多个参数打包为数组处理。语法格式为...参数名: 类型[],使用扩展运算符...作为前缀,必须放在参数列表的最后位置

function makeMilkTea(flavor: string, sweetness: string = '全糖', ...toppings: string[]): string { let tea = `一杯${sweetness}的${flavor}奶茶`; if (toppings.length > 0) { tea += `,加${toppings.join('、')}`; } return tea; } // 调用时可传入任意数量的小料 makeMilkTea('草莓', '半糖', '珍珠', '椰果', '布丁');
参数对比总结
参数类型语法格式作用是否必传使用场景
普通必选参数参数名: 类型接收指定类型的传入值必须传入的基础参数
可选参数参数名?: 类型允许调用时省略,未传为undefined非必需参数
默认参数参数名: 类型 = 默认值未传参时自动使用默认值简化调用且需要保底值的场景
剩余参数...参数名: 类型[]接收任意数量同类型参数,转为数组处理数量不确定的参数场景

易错点提醒

  • 普通必选参数必须显式传递,不能省略。

  • 剩余参数必须放在参数列表的末尾,放在其他位置会编译报错。

  • 四种参数的语法标识需记清:可选用?、默认用=、剩余用...

函数返回类型规则

返回类型用于声明函数执行完成后返回值的数据类型。函数体内所有return语句的返回值类型,必须与声明的返回类型严格匹配。

// 显式声明返回 string 类型 function makeMilkTea(flavor: string, sweetness: string): string { return `一杯${sweetness}的${flavor}奶茶`; }

类型推导省略:如果可以从函数体推断出返回类型,可以省略返回类型标注。但实际开发中不建议省略,显式声明返回类型能让代码意图更清晰,便于维护。

// 省略返回类型(依赖类型推导,不推荐) function makeMilkTea(flavor: string, sweetness: string) { return `一杯${sweetness}的${flavor}奶茶`; }

无返回值声明:没有return语句、不返回任何值的函数,可显式指定返回类型为void,也可省略。

// 无返回值,显式声明为 void function hi1(): void { console.info('hi1'); }

函数作用域

函数内部定义的变量只能在函数内部访问,函数外部无法访问;外部定义的变量作用域覆盖全局。该规则可以避免不同位置的变量互相干扰。

let text: string = "I am outer"; function testScope(): void { let text: string = "I am inner"; console.log(text); // 输出: I am inner } console.log(text); // 输出: I am outer

实战:打印九九乘法表

实现思路

九九乘法表本质是一个二维表格,使用双层for循环实现:

  • 外层循环:控制行数(乘数),i从 1 递增到 9。

  • 内层循环:控制每行的列数(被乘数),j从 1 递增到i

规律:第i行的乘数为i,被乘数j从 1 到i

实现步骤
  1. 定义空字符串变量result,用于拼接当前行的所有乘法表达式。

  2. 外层循环:i从 1 递增到 9,控制当前行的乘数。

  3. 内层循环:j从 1 递增到i,控制当前行的被乘数。

  4. 内层循环中生成j × i = 乘积格式的表达式,拼接到result中。

  5. 内层循环结束后,打印result输出整行乘法表。

  6. 重置result为空字符串,准备下一行拼接。

完整实现代码

let result: string = ''; for (let i = 1; i <= 9; i++) { for (let j = 1; j <= i; j++) { // 生成乘法表达式并拼接 let temp: string = j + ' × ' + i + ' = ' + i * j; result += temp; result += ' '; } console.log(result); // 重置结果字符串,准备下一行 result = ''; }

输出结果

1 × 1 = 1 1 × 2 = 2 2 × 2 = 4 1 × 3 = 3 2 × 3 = 6 3 × 3 = 9 1 × 4 = 4 2 × 4 = 8 3 × 4 = 12 4 × 4 = 16 1 × 5 = 5 2 × 5 = 10 3 × 5 = 15 4 × 5 = 20 5 × 5 = 25 1 × 6 = 6 2 × 6 = 12 3 × 6 = 18 4 × 6 = 24 5 × 6 = 30 6 × 6 = 36 1 × 7 = 7 2 × 7 = 14 3 × 7 = 21 4 × 7 = 28 5 × 7 = 35 6 × 7 = 42 7 × 7 = 49 1 × 8 = 8 2 × 8 = 16 3 × 8 = 24 4 × 8 = 32 5 × 8 = 40 6 × 8 = 48 7 × 8 = 56 8 × 8 = 64 1 × 9 = 9 2 × 9 = 18 3 × 9 = 27 4 × 9 = 36 5 × 9 = 45 6 × 9 = 54 7 × 9 = 63 8 × 9 = 72 9 × 9 = 81

必须在外层循环每次开始时重置result为空字符串,否则上一行内容会累积到下一行,导致结果错乱。

总结

本节课重点学习了以下内容:

  1. 函数声明语法:通过function关键字声明函数,需指定函数名、参数列表、返回类型和函数体。

  2. 四种参数类型

    • 必选参数:调用时必须传入。

    • 可选参数(?):可传可不传。

    • 默认参数(=):未传值时使用默认值。

    • 剩余参数(...):接收不定数量参数,必须放在参数列表末尾。

  3. 返回类型:所有return语句的返回值类型必须与声明匹配;建议显式声明返回类型,不推荐省略;无返回值时可用void

  4. 函数作用域:函数内部定义的变量仅在函数内部可访问,外部无法访问,实现变量隔离。

  5. 实战案例:通过双层for循环实现九九乘法表,综合运用了变量定义、循环语句、字符串拼接和复合赋值等知识点。