认识 ArkTS 语法

ArkTS语法就是ts、js语法的超集,引入ArkUI框架(声明式语句),

**变量常量的声明和使用

ArkTS 复制代码
//变量的声明
let hi: string = 'hello';
hi = 'hello, world';

//常量的声明,只能被复制一次
const hello: string = 'hello';

//自动类型推断,由于ArkTS是一种静态类型语言,所有数据的类型都必须在编译时确定
let hi1: string = 'hello';
let hi2 = 'hello, world';

**函数的声明和使用

ArkTS 复制代码
if (condition1) {
  // 语句1
} else if (condition2) {
  // 语句2
} else {
  // else语句
}

let s1 = 'Hello';
if (s1) {
  console.log(s1); // 打印"Hello"
}

let s2 = 'World';
if (s2.length != 0) {
  console.log(s2); // 打印"World"
}

switch (expression) {
  case label1: // 如果label1匹配,则执行
    // ...
    // 语句1
    // ...
    break; // 可省略
  case label2:
  case label3: // 如果label2或label3匹配,则执行
    // ...
    // 语句23
    // ...
    break; // 可省略
  default:
    // 默认语句
}

condition ? expression1 : expression2

for ([init]; [condition]; [update]) {
  statements
}

for (forVar of expression) {
  statements
}

let n = 0;
let x = 0;
while (n < 3) {
  n++;
  x += n;
}

let i = 0;
do {
  i += 1;
} while (i < 10)

let x = 0;
while (true) {
  x++;
  if (x > 5) {
    break;
  }
}

let sum = 0;
for (let x = 0; x < 100; x++) {
  if (x % 2 == 0) {
    continue
  }
  sum += x;
}

try {
  // 可能发生异常的语句块
} catch (e) {
  // 异常处理
}

function processData(s: string) {
  let error: Error | null = null;

  try {
    console.log('Data processed: ' + s);
    // ...
    // 可能发生异常的语句
    // ...
  } catch (e) {
    error = e as Error;
    // ...
    // 异常处理
    // ...
  } finally {
    if (error != null) {
      console.log(`Error caught: input='${s}', message='${error.message}'`);
    }
  }
}


function add(x: string, y: string): string {
  let z: string = `${x} ${y}`;
  return z;
}

在函数声明中,必须为每个参数标记类型。如果参数为可选参数,那么允许在调用函数时省略该参数。函数的最后一个参数可以是rest参数

箭头函数
let sum = (x: number, y: number): number => {
  return x + y;
}

**类的声明和使用(体现面向对象特性 封装 继承 多态)

ArkTS 复制代码
//number和Number类型
let n1 = 3.14;
let n2 = 3.141592;
let n3 = .5;
let n4 = 1e10;

function factorial(n: number): number {
  if (n <= 1) {
    return 1;
  }
  return n * factorial(n - 1);
}

//布尔类型
let isDone: boolean = false;

// ...

if (isDone) {
  console.log ('Done!');
}

//String类型
let s1 = 'Hello, world!\n';
let s2 = 'this is a string';
let a = 'Success';
let s3 = `The result is ${a}`;

//Void类型,void类型用于指定函数没有返回值,此类型只有一个值,同样是void。由于void是引用类型,因此它可以用于泛型类型参数
class Class<T> {
  //...
}
let instance: Class <void>


//**Object类型**
Object类型是所有引用类型的基类型。任何值,包括基本类型的值(它们会被自动装箱),都可以直接被赋给Object类型的变量。

//**Array类型**
let names: string[] = ['Alice', 'Bob', 'Carol'];

//**Enum类型**
enum ColorSet { Red, Green, Blue }
let c: ColorSet = ColorSet.Red;
//常量表达式可以用于显式设置枚举常量的值。
enum ColorSet { White = 0xFF, Grey = 0x7F, Black = 0x00 }
let c: ColorSet = ColorSet.Black;


//**Union类型**
class Cat {
  // ...
}
class Dog {
  // ...
}
class Frog {
  // ...
}
type Animal = Cat | Dog | Frog | number
// Cat、Dog、Frog是一些类型(类或接口)

let animal: Animal = new Cat();
animal = new Frog();
animal = 42;
// 可以将类型为联合类型的变量赋值为任何组成类型的有效值

//**Aliases类型**

Aliases类型为匿名类型(数组、函数、对象字面量或联合类型)提供名称,或为已有类型提供替代名称。
type Matrix = number[][];
type Handler = (s: string, no: number) => string;
type Predicate <T> = (x: T) => Boolean;
type NullableObject = Object | null;

可见性修饰符:private public protect

**运算符

复合赋值运算符将赋值与运算符组合在一起,其中x op = y等于x = x op y

一元运算符为-、+、--、++

二元元算符:±*/

逻辑运算符:与或非

位运算符:与或非 疑惑 左右移

**对象字面量

ArkTS 复制代码
class C {
  n: number = 0
  s: string = ''
}

let c: C = {n: 42, s: 'foo'};

**接口(非java中的标准接口,该接口可以有属性)

ArkTS 复制代码
interface Style {
  color: string // 属性
}
interface AreaSize {
  calculateAreaSize(): number // 方法的声明
  someMethod(): void;     // 方法的声明
}

**模块

有导出导入的概念,导入分为静态导入和动态导入

程序可划分为多组编译单元或模块。

每个模块都有其自己的作用域,即,在模块中创建的任何声明(变量、函数、类等)在该模块之外都不可见,除非它们被显式导出。

与此相对,从另一个模块导出的变量、函数、类、接口等必须首先导入到模块中。

**关键字

关键字this只能在类的实例方法中使用

ets 复制代码
class A {
  count: string = 'a'
  m(i: string): void {
    this.count = i;
  }
}

**声明式UI语法

自定义组件的概念

元素属性

容器:横向布局,纵向布局,row() colum()

ForEach语法渲染列表所有数据

相关推荐
7yewh1 分钟前
嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目
linux·开发语言·arm开发·驱动开发·qt·opencv·嵌入式linux
waicsdn_haha13 分钟前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
_WndProc15 分钟前
C++ 日志输出
开发语言·c++·算法
web1478621072317 分钟前
C# .Net Web 路由相关配置
前端·c#·.net
m0_7482478017 分钟前
Flutter Intl包使用指南:实现国际化和本地化
前端·javascript·flutter
飞的肖21 分钟前
前端使用 Element Plus架构vue3.0实现图片拖拉拽,后等比压缩,上传到Spring Boot后端
前端·spring boot·架构
qq_4335545424 分钟前
C++ 面向对象编程:+号运算符重载,左移运算符重载
开发语言·c++
青灯文案128 分钟前
前端 HTTP 请求由 Nginx 反向代理和 API 网关到后端服务的流程
前端·nginx·http
m0_7482548833 分钟前
DataX3.0+DataX-Web部署分布式可视化ETL系统
前端·分布式·etl
数据小爬虫@43 分钟前
如何高效利用Python爬虫按关键字搜索苏宁商品
开发语言·爬虫·python