HarmonyOS(ArkTS)学习笔记第二天——ArkTS初体验

本文介绍了华为自研的开发语言ArkTS,重点讲解了其基础语法,包括数据类型(如存储格式、布尔类型、数字、字符串、数组、元组、联合、枚举、unknown和undefined)、条件语句(如if-else、switch)、循环和函数(无返回值、有返回值和箭头函数),以及类和接口的概念。
摘要由CSDN通过智能技术生成

目录

1.ArkTS语言介绍

2.基础语法

1.基础类型 

        1.存储数据或变量格式

        2.布尔类型

        3.数字

        4.字符串 

        5.数组

        6.元组

        7.联合

        8.枚举

        9.unknown

        10.unll和undefined

2.条件语句 

        1.if-else语句

         2.switch

         3.循环语句

        3.函数

        1.无返回值的函数

        2.有返回值的函数

         3.箭头函数

 4.类和接口


 

         今天是一起学习的第二天,在上一篇中已经下载好了DevEco studio,并且配置了环境。很多小伙伴可能有HTML,CSS,JS,vue学习经历,或者Android开发经历,那么在鸿蒙开发中,我们从ArkTS开始。

         在华为开发者学堂中,可以看到详细的关于ArkTS的背景,起源和演进,感兴趣的小伙伴可以点开了解。

        附上官网链接:华为开发者学堂首页-华为开发者学堂 (huawei.com)

        我的老师(彭老师)在授课的过程中时是从TypeScript的基础语法开始的,可以类比学习ArkTS,不了解TypeScript基础语法并且想仔细熟悉一下的小伙伴也可以先去搜索一下,在这里的第二部分也会介绍,也可以继续看下去。

        那么我们正式开始吧。

1.ArkTS语言介绍

         ArkTS 是华为自研的开发语言,它在TS的基础上,匹配ArkUI框架,扩展了声明式UI、状态管理等相应的能力,让开发者以更简洁、更自然的方式开发跨端应用。

        ArkTS是HarmonyOS优选的主力应用开发语言,方舟开发框架 ,为HarmonyOS应用的UI开发提供了完整的基础设施,包括简洁的UI语法、丰富的UI功能(组件、布局、动画以及交互事件),以及实时界面预览工具等,可以支持开发者进行可视化界面开发。

        ArkTS围绕应用开发在TS生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。因此,在学习ArkTS语言之前,建议开发者具备TS语言开发能力。

        当前,ArkTS在TS的基础上主要扩展了如下能力:

  1. 基本语法:ArkTS定义了声明式UI描述、自定义组件和动态扩展UI元素的能力,再配合ArkUI开发框架中的系统组件及其相关的事件方法、属性方法等共同构成了UI开发的主体。

  2. 状态管理:ArkTS提供了多维度的状态管理机制。在UI开发框架中,与UI相关联的数据可以在组件内使用,也可以在不同组件层级间传递,比如父子组件之间、爷孙组件之间,还可以在应用全局范围内传递或跨设备传递。另外,从数据的传递形式来看,可分为只读的单向传递和可变更的双向传递。开发者可以灵活的利用这些能力来实现数据和UI的联动。

  3. 控制渲染:ArkTS提供了渲染控制的能力。条件渲染可根据应用的不同状态,渲染对应状态下的UI内容。循环渲染可从数据源中迭代获取数据,并在每次迭代过程中创建相应的组件。数据懒加载从数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。

        未来,ArkTS会结合应用开发/运行的需求持续演进,逐步提供并行和并发能力增强、系统类型增强、分布式开发范式等更多特性。

        文字太多很难看懂?别急,这里我们借用一下官网的图,需要了解一下的(图1:ArkTS、TypeScript和JavaScript之间的关系 。以及图2:ArkUI开发框架):

2.基础语法

1.基础类型 

        1.存储数据或变量格式

        存储数据时,用变量或常量(!!!命名只能包含数字、字母、下划线、$,不能以数字开头),变量可变。

        格式: let 变量名: 类型 = 值;

例如:

let title: string = '水果捞';
let price: number = 21.8;

         常量不可变。例如:π(圆周率),huawei(名称)
        格式:const 常量名: 类型 = 值;

例如:

const PI: number = 3.141592653589793;

        2.布尔类型

        布尔类型,赋值为true或者false;
        格式: let 变量名 : boolean = true;
例如:

let isselect : boolean = false; 
let isbool: boolean = true;

        3.数字

        所有的数字都是浮点数,类型是number,支持十进制、二进制、八进制、十六进制
        格式: let 变量名 : number = 2024;
例如:

let price: number = 21.8;
let binary : number = 0b11011;
let octal : number = 0o412;
let hex : number = 0x2e3;

        4.字符串 

        格式: let 变量名 : string = "这里的字符串单引号和双引号都行"; 
例如:

let title: string = '水果捞';

        5.数组

        第一种:在元素类型后面加上[],第二种使用数组泛型。
        格式:let 数组名: 类型[] = [数据1,数据2,数据3......];
        数组泛型 :let 数组名 : Array<元素类型> = [数据1,数据2,数据3......];
例如:(!!数据必须同前面的类型一致)

let names: string[] = ['小红','小明','大强'];
let list: Array<number> = [1,2,3];

        6.元组

        允许表示一个已知元素类型和数量的数组,各元素的类型可以不同。

        格式:let 变量名 : [类型1,类型2];     也要注意类型对应,不然会报错。

let x:[string,number];
x = ["hello",12];

        7.联合

        联合类型时一种灵活的数据类型,它修饰的变量可以存储不同的数据类型
        格式:let 变量:类型1 | 类型2 |类型3 = 值

例如:

let judge: number| string = 100;
judge = 'A';                // 合法

        联合类型还可以将变量值约定在一组数据范围内进行选择
例如:

let gender : 'man' | 'woman' | 'secret' = 'man';    //实际运用时只能选这三个写,可以降低错误率

        8.枚举

        约定变量只能在一组数据范围内选择值(与联合的区别:不仅有值,还有值的名称)
        枚举(常量列表)

        1.定义枚举类型(常量列表)
        2.使用枚举类型,约束变量格式:
        enum 枚举名{                 //定义枚举类型
            常量1 = 值,              //注意逗号
            常量2 = 值,
            ..........
        }
例如:

enum ThemeColor{    
    Red = '#ff0f29',          //最好首字母大写
    Orange = '#ff7100',
    Green = '#30b30e'
}

let color: ThemeColor = ThemeColor.Red   //使用枚举类型

        9.unknown

        如果想要给在编程阶段还不清楚类型的变量指定一个类型。可以使用unknown来标记这些变量。

let notsure : unknown = 4;
notsure = "maybe string";
notsure = false;

        10.unll和undefined

let u : null = null;
let un: undefined = undefined;

        !小建议:在不熟悉的地方可以在DevEco studio中打一遍 ,然后使用console.log来看结果。代码写在最上面的部分,然后通过调用console.log(),在下面的日志中查看。

例如:

2.条件语句 

        1.if-else语句

        if-else语句,包括嵌套的if语句,和大多数开发语言类似,相信大多数小伙伴都知道怎么用,这里以一个简单的判断奇偶为例。

//定义数字
let num: number = 17;

if(num > 0)
  console.log(num+" 是正数");
else if(num < 0)
  console.log(num+" 是负数");
 else
  console.log(num+" 不是正数也不是负数");

//判断是否是偶数
if(num % 2 === 0)
  console.log(num + '是偶数');
else
  console.log(num + '是奇数');

         2.switch

         那么switch也是同样的,这里以一个输入成绩的等级来评价成绩的例子来演示。注意:在TypeScript 中,空字符串、数字0、null、undefined都会被认为是false,其他值则为true。

let grade: string = "A"; 
switch(grade) { 
    case "A": { 
        console.log("优"); 
        break; 
    } 
    case "B": { 
        console.log("良"); 
        break; 
    } 
    case "C": {
        console.log("及格"); 
        break;    
    } 
    case "D": { 
        console.log("不及格"); 
        break; 
    }  
    default: { 
        console.log("非法输入"); 
        break;              
    } 
}

         3.循环语句

         支持for和while循环,和大多数语言类似,并且为一些内置类型,如Array等提供了快捷迭代语法。简单的举例如下。

for循环格式:

        for ( init; condition; increment ){
            statement(s);
        }

例如:

for(let i=1; i <= 5; i++){
  console.log('第 ' + i + ' 个数')
}

 while循环格式:

        while(condition)
        {
           statement(s);
        }

let i=1;
while(i <= 5){
  console.log('while循环第 ' + i + '次');
  i++;
}

 for in迭代器:

//定义数组
let names: string[] = ['阿粥','不喝','稀饭'];
//for in 迭代器,遍历得到数组下标
for(let i in names){
    console.log(i + ':' + names[i])
}

 for of迭代器:

//定义数组
let names: string[] = ['张三','李四','王五'];
//for of 迭代器,直接得到元素
for(let name of names){
    console.log(name)
}

        3.函数

         使用函数的目的是为了可以重复调用代码块,在这里通常利用function关键字声明函数,并且支持可选参数、默认参数、箭头函数等特殊语法。

        1.无返回值的函数

        格式:  function 函数名() {
                      //函数体
                    }

例如:

function star(){                       //定义
  console.log('五角星','*')
  console.log('五角星','**')
  console.log('五角星','***')
  console.log('五角星','****')
  console.log('五角星','*****')
}
star();                               //调用
star();

        2.有返回值的函数

        传入不同的数据,进行处理,返回处理后的结果。

        格式:

        function 函数名(形参1: 类型,形参2:类型......) //定义
        {
            //函数体
            return 返回值
        }

        let 变量名: 类型 = 函数名(实参1,实参2,.....) //调用
例如:

function buy(price:number, num:number)
{
  let ans:number = price * num;
  return ans;
}
let money : number = buy(12,20);
console.log(money);

         3.箭头函数

         在某些情况下,箭头函数会很方便。形式为:() =>{ //函数体 }

        格式:

        let 函数名 = (形参1:类型,形参2:类型.......)=>{ //函数体 }
        函数名(实参1,实参2......)

那么,就以上一个打印星星的函数为例:

let star = () =>{
	console.log('五角星','*')
  	console.log('五角星','**')
  	console.log('五角星','***')
  	console.log('五角星','****')
  	console.log('五角星','*****')
}
star();

相似地,以上一个由单价数量来计算价格的函数为例:

let buy2 = (price2:number,num2:number) =>{
  let ans2:number = price2*num2;
  return ans2;
}
let banana:number = buy2(11,30);

 4.类和接口

         什么是对象呢,是用于描述一个物体的特征和行为,可以存储多个数据,由属性名和属性值对应。

        格式:let 对象名称: 对象结构类型 = 值

        1.通过Interface接口来约定对象结构类型
        interface 接口名{
             属性1:类型1
             属性2:类型2
             属性3:类型3
        }
        访问对象属性:   对象名.属性名

例如:

interface Person{         //定义接口
     name: string 
     age : number
     weight: number
}
let person: Person = {    //基于接口定义对象
     name : 'ZZZ',       //注意一定要有逗号
     age : 20,            //注意一定要有逗号
     weight : 116 
}

         对象的方法:1.约定方法类型,2.添加方法

        格式:
        interface 接口名称{                        //约定方法类型
             方法名:(参数:类型)=>返回值类型
        }
例如:

interface Person{    
     dance:() => void
     sing:(song: string) => void
}

let zzz: Person = {                   // 添加方法
  dance: () => {
    console.log('阿粥说', '学会习')
  },
  sing: (song:string) =>{
    console.log('阿粥说','背会单词',song)
  }
}

zzz.dance();
zzz.sing('abandon')

 今天就先到这里了 ^ v ^

  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值