HarmonyOS6.0ArkTS函数通关指南:从入门到实战,带你吃透“代码菜谱”

94 阅读5分钟

ArkTS函数通关指南:从入门到实战,12年程序员带你吃透“代码菜谱”

大家好,我是深耕嵌入式、鸿蒙、AI及Java领域12年的程序员Feri,带过团队创过业,一直专注于程序员成长这件事~ 函数作为编程的核心工具,就像做菜的“万能菜谱”,学好它能让你的代码更简洁、复用率更高。今天就用最通俗的方式,带大家搞定ArkTS的函数,成长路上一起加油,君志所向,一往无前!

一、先搞懂:函数到底是什么?

函数本质就是一段“封装好的可重复代码”,像一份详细的菜谱:

  • 菜谱告诉你“需要什么食材(参数)”“怎么做(函数实现)”“最后做出什么菜(返回值)”;
  • 函数则告诉计算机“需要什么输入(参数)”“执行什么逻辑(函数体)”“最后返回什么结果(返回值)”。

它的核心作用就一个:避免重复写代码。比如“计算两个数相加”“判断闰年”这些常用逻辑,封装成函数后,想用就调,不用反复复制粘贴。

二、ArkTS函数语法:格式要记牢(强类型是关键)

ArkTS是强类型语言,参数和返回值必须明确指定类型(比如number、string、boolean),语法格式如下:

function 函数名(参数名: 数据类型, ...): 返回值类型 {
    函数逻辑实现;
    return 返回值; // 若返回值类型为void,可省略return
}

拆解成三个核心部分,一看就懂:

  1. 函数名:给函数起个好记的名字,比如“addNumbers”“isLeapYear”,见名知意;
  2. 参数:输入的“食材”,要指定类型(比如number表示数字、string表示字符串);
  3. 返回值:输出的“成品”,也要指定类型,若没有返回值则用“void”。

三、四种常用函数定义:覆盖所有场景

就像菜谱分“快手菜”“硬菜”,函数也分四种核心类型,每个类型都有对应的实用场景,直接上代码+说明:

1. 无参无返回值(“不用食材,直接出菜”)

场景:不需要输入,只执行固定逻辑(比如打印随机数)

// 无参无返回值:返回值类型可省略,默认void
function printLuckyNumber() {
  // 生成0-9的随机整数
  const luckyNum = Math.floor(Math.random() * 10);
  console.log(`你的幸运数字:${luckyNum}`);
}

2. 有参无返回值(“给食材,做了直接吃”)

场景:需要输入参数,执行逻辑后不返回结果(比如判断闰年并打印)

// 有参无返回值:参数year指定为number类型,返回值void
function checkLeapYear(year: number) {
  // 闰年规则:4年一闰,百年不闰,四百年再闰
  const isLeap = (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);
  console.log(`${year}年是${isLeap ? '闰年' : '平年'}`);
}

3. 无参有返回值(“不用食材,做出菜打包带走”)

场景:不需要输入,执行后返回结果(比如随机推荐午餐)

// 无参有返回值:指定返回值类型为string
function randomLunch(): string {
  const lunches = ["快餐", "牛肉面", "包子", "肯德基"];
  // 随机取一个午餐
  const randomIndex = Math.floor(Math.random() * lunches.length);
  return lunches[randomIndex];
}

4. 有参有返回值(“给食材,做出菜打包带走”)

场景:需要输入参数,执行后返回结果(比如根据名字推荐午餐)

// 有参有返回值:参数name为string,返回值也为string
function recommendLunch(name: string): string {
  const lunch = randomLunch(); // 调用上面的无参有返回值函数
  return `${name}中午应该吃:${lunch}`;
}

四、函数调用:“菜谱做好了,怎么用?”

定义好函数后,调用就像“按菜谱做菜”,直接写函数名+传参(无参则空括号),测试用例安排上:

it("函数调用测试", 0, () => {
  // 1. 调用无参无返回值函数
  printLuckyNumber(); 
  // 2. 调用有参无返回值函数:传入实际参数2025
  checkLeapYear(2025); 
  // 3. 调用无参有返回值函数:接收返回结果并打印
  const todayLunch = randomLunch();
  console.log("今日随机午餐:", todayLunch);
  // 4. 调用有参有返回值函数:传入名字,接收结果并打印
  const feriLunch = recommendLunch("Feri");
  console.log(feriLunch);
  // 额外测试:质数判断函数(后面练习会讲)
  console.log("3是否为质数:", isPrime(3)); 
  console.log("10是否为质数:", isPrime(10));
});

五、实战练习:动手实现“质数判断函数”

光看不用假把式,来个小挑战:实现一个函数,接收一个数字参数,判断它是否为质数(只能被1和自身整除的大于1的整数)

// 有参有返回值:参数num为number,返回值为boolean
function isPrime(num: number): boolean {
  // 边界条件:小于等于1的数不是质数
  if (num <= 1) return false;
  // 优化:只需判断到num的平方根(减少循环次数)
  for (let i = 2; i <= Math.sqrt(num); i++) {
    if (num % i === 0) return false; // 能被其他数整除,不是质数
  }
  return true; // 循环结束没找到除数,是质数
}

小贴士:这里加了“循环到平方根”的优化,比原代码效率更高,编程时要记得兼顾正确性和性能~

六、参数的3个实用特性:让函数更灵活

就像菜谱可以“选加配料”“多加配料”,ArkTS的函数参数也有三个超实用特性,覆盖更多场景:

1. 形参 vs 实参(“菜谱配料” vs “实际食材”)

  • 形参:函数定义时写的参数(比如checkLeapYear(year: number)中的year),是“菜谱上的配料名称”;
  • 实参:函数调用时传的参数(比如checkLeapYear(2025)中的2025),是“实际准备的食材”;
  • 核心原则:实参类型要和形参类型一致,不然会报错(强类型语言的优势,避免类型混乱)。

2. 可选参数(“可选配料,可加可不加”)

场景:有些参数不是必填的,比如“打招呼时可以说名字,也可以不说”

  • 语法:参数名后加?,必须放在最后一个参数位置;
  • 注意:没传可选参数时,它的默认值是undefined
// 可选参数name:可传可不传
function sayHello(name?: string) {
  const msg = name ? `${name} is a good man!` : &#34;You are a good man!&#34;;
  console.log(msg);
}
// 两种调用方式都合法
sayHello(); // 输出:You are a good man!
sayHello(&#34;Tom&#34;); // 输出:Tom is a good man!

3. 剩余参数(“不限量配料,想加多少加多少”)

场景:参数数量不确定,比如“统计一个人的多个爱好”

  • 语法:用...开头,参数类型必须是数组(比如string[]),必须放在最后一个参数位置;
  • 特点:调用时可传0个、1个或多个参数,函数内部会把它们当成数组处理。
// 剩余参数hobbies:收集所有传入的爱好,类型为string[]
function showHobbies(name: string, ...hobbies: string[]) {
  console.log(`${name}的爱好有:${hobbies.length ? hobbies.join(&#34;、&#34;) : &#34;暂无&#34;}`);
}
// 三种调用方式都合法
showHobbies(&#34;Feri&#34;); // 输出:Feri的爱好有:暂无
showHobbies(&#34;Feri&#34;, &#34;编程&#34;); // 输出:Feri的爱好有:编程
showHobbies(&#34;Feri&#34;, &#34;编程&#34;, &#34;跑步&#34;, &#34;看电影&#34;); // 输出:Feri的爱好有:编程、跑步、看电影

七、箭头函数:简洁到飞起的“快捷菜谱”

箭头函数是普通函数的简化写法,语法更灵活,尤其适合短小的函数,核心特点是“简洁+this不迷路”。

1. 基础语法(三种常见形式)

// 1. 无参无返回值
const func1 = () => console.log(&#34;箭头函数:无参无返回值&#34;);

// 2. 单参无返回值(参数括号可省略)
const func2 = name => console.log(`Hello, ${name}`);

// 3. 有参有返回值(函数体只有一行时,可省略大括号和return)
const add = (a: number, b: number) => a + b;

// 4. 函数体多行(需加大括号和return)
const multiply = (a: number, b: number) => {
  const result = a * b;
  return result;
};

2. 核心优势:this不“跑偏”

这是箭头函数最关键的特点,普通函数的this像“变色龙”(由调用方式决定),而箭头函数的this是“定向导航”(继承自外层作用域):

  • 普通函数:在回调、事件处理中容易出现this指向错误;
  • 箭头函数:在ArkUI的事件处理(如按钮点击)、数组方法(如map、filter)中,能确保this指向当前组件或外层作用域,不用写const that = this这种冗余代码。

3. 注意点:两个“没有”

  • 没有自己的arguments对象:若需要获取所有参数,用剩余参数...args替代;
  • 不能当构造函数:不能用new关键字调用箭头函数。

4. 适用场景(鸿蒙开发中高频使用)

  1. 数组方法回调:const numbers = [1,2,3].map(num => num * 2);(简洁高效);
  2. 事件处理:ArkUI中按钮点击事件Button(&#34;点击&#34;).onClick(() => this.handleClick())(确保this指向正确);
  3. 短小逻辑函数:比如简单的计算、数据转换,用箭头函数减少代码量。

八、总结:函数学习核心要点

  1. 核心作用:封装逻辑、重复使用,让代码更简洁、易维护;
  2. 语法关键:ArkTS是强类型,参数和返回值必须指定类型;
  3. 灵活用法:可选参数、剩余参数适配不同场景,箭头函数简化代码+解决this问题;
  4. 实战技巧:函数名见名知意,逻辑尽量单一(一个函数只做一件事),便于调试和复用。

如果大家想考取鸿蒙开发者认证的,欢迎加入我的专属考试链接中:developer.huawei.com/consumer/cn…

函数是编程的基础,也是鸿蒙开发中构建界面逻辑、处理事件的核心工具。把这篇指南里的例子动手敲一遍,再结合自己的需求写几个函数,很快就能熟练掌握~加油呀!