移动端六大语言速记:第2部分 - 控制结构

移动端六大语言速记:第2部分 - 控制结构

本文继续对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言的控制结构,帮助开发者快速掌握各语言的语法差异。

2. 控制结构

2.1 条件语句

各语言条件语句的语法对比:

语言if语句三元运算符switch/case空值处理
Javaif (condition) {...} else if (condition) {...} else {...}condition ? value1 : value2switch(var){case val: ... break;}if(obj != null)
Kotlinif (condition) {...} else if (condition) {...} else {...}if (condition) value1 else value2when(var){value -> ...}?., ?:, !!
Dartif (condition) {...} else if (condition) {...} else {...}condition ? value1 : value2switch(var){case val: ... break;}?., ??, !.
Pythonif condition: ... elif condition: ... else: ...value1 if condition else value2无原生支持,用字典或if-elifif obj is not None
ArkTSif (condition) {...} else if (condition) {...} else {...}condition ? value1 : value2switch(var){case val: ...}?., ??
Swiftif condition {...} else if condition {...} else {...}condition ? value1 : value2switch var {case val: ...}?, ??, !
示例对比

Java:

// if-else语句
int score = 85;
String grade;if (score >= 90) {grade = "A";
} else if (score >= 80) {grade = "B";
} else if (score >= 70) {grade = "C";
} else {grade = "D";
}// 三元运算符
boolean isPassed = score >= 60 ? true : false;// switch语句
int day = 3;
String dayName;switch (day) {case 1:dayName = "Monday";break;case 2:dayName = "Tuesday";break;case 3:dayName = "Wednesday";break;// ... 其他情况default:dayName = "Invalid day";
}// 空值处理
String text = null;
if (text != null) {System.out.println(text.length());
}

Kotlin:

// if-else语句
val score = 85
val grade = if (score >= 90) {"A"
} else if (score >= 80) {"B"
} else if (score >= 70) {"C"
} else {"D"
}// Kotlin使用if-else作为表达式
val isPassed = if (score >= 60) true else false// when语句 (类似switch)
val day = 3
val dayName = when (day) {1 -> "Monday"2 -> "Tuesday"3 -> "Wednesday"// ... 其他情况else -> "Invalid day"
}// 空值处理
val text: String? = null
// 安全调用操作符
val length = text?.length  // 如果text为null,则length为null
// Elvis操作符
val nonNullLength = text?.length ?: 0  // 如果text为null,则nonNullLength为0
// 非空断言操作符
try {val forcedLength = text!!.length  // 如果text为null,抛出NullPointerException
} catch (e: Exception) {println("Caught exception: $e")
}

Dart:

// if-else语句
int score = 85;
String grade;if (score >= 90) {grade = "A";
} else if (score >= 80) {grade = "B";
} else if (score >= 70) {grade = "C";
} else {grade = "D";
}// 三元运算符
bool isPassed = score >= 60 ? true : false;// switch语句
int day = 3;
String dayName;switch (day) {case 1:dayName = "Monday";break;case 2:dayName = "Tuesday";break;case 3:dayName = "Wednesday";break;// ... 其他情况default:dayName = "Invalid day";
}// 空值处理
String? text = null;
// 安全调用操作符
int? length = text?.length;  // 如果text为null,则length为null
// 空值合并操作符
int nonNullLength = text?.length ?? 0;  // 如果text为null,则nonNullLength为0

Python:

# if-else语句
score = 85if score >= 90:grade = "A"
elif score >= 80:grade = "B"
elif score >= 70:grade = "C"
else:grade = "D"# 条件表达式(类似三元运算符)
is_passed = True if score >= 60 else False# 使用字典模拟switch语句
day = 3
day_names = {1: "Monday",2: "Tuesday",3: "Wednesday",# ... 其他情况
}
day_name = day_names.get(day, "Invalid day")# 空值处理
text = None
if text is not None:print(len(text))

ArkTS:

// if-else语句
let score: number = 85;
let grade: string;if (score >= 90) {grade = "A";
} else if (score >= 80) {grade = "B";
} else if (score >= 70) {grade = "C";
} else {grade = "D";
}// 三元运算符
let isPassed: boolean = score >= 60 ? true : false;// switch语句
let day: number = 3;
let dayName: string;switch (day) {case 1:dayName = "Monday";break;case 2:dayName = "Tuesday";break;case 3:dayName = "Wednesday";break;// ... 其他情况default:dayName = "Invalid day";
}// 空值处理
let text: string | null = null;
// 可选链操作符
let length = text?.length;  // 如果text为null,则length为undefined
// 空值合并操作符
let nonNullLength = text?.length ?? 0;  // 如果text为null,则nonNullLength为0

Swift:

// if-else语句
let score = 85
var grade: Stringif score >= 90 {grade = "A"
} else if score >= 80 {grade = "B"
} else if score >= 70 {grade = "C"
} else {grade = "D"
}// 三元运算符
let isPassed = score >= 60 ? true : false// switch语句
let day = 3
var dayName: Stringswitch day {case 1:dayName = "Monday"case 2:dayName = "Tuesday"case 3:dayName = "Wednesday"// ... 其他情况default:dayName = "Invalid day"
}
// Swift的switch不需要break语句,默认不会贯穿到下一个case// 空值处理
let text: String? = nil
// 可选绑定
if let safeText = text {print(safeText.count)
}
// 空合运算符
let nonNullLength = text?.count ?? 0  // 如果text为nil,则nonNullLength为0

2.2 循环语句

各语言循环语句的语法对比:

语言for循环while循环do-while循环迭代器/集合遍历
Javafor(init;condition;update)while(condition)do {...} while(condition);for(Type item : collection)
Kotlinfor(i in range)while(condition)do {...} while(condition)for(item in collection)
Dartfor(init;condition;update)while(condition)do {...} while(condition);for(var item in collection)
Pythonfor i in range()while condition:无原生支持for item in collection:
ArkTSfor(init;condition;update)while(condition)do {...} while(condition);for(let item of collection)
Swiftfor i in rangewhile conditionrepeat {...} while conditionfor item in collection
示例对比

Java:

// 标准for循环
for (int i = 0; i < 5; i++) {System.out.println(i);
}// while循环
int j = 0;
while (j < 5) {System.out.println(j);j++;
}// do-while循环
int k = 0;
do {System.out.println(k);k++;
} while (k < 5);// 增强for循环(集合遍历)
List<String> fruits = Arrays.asList("Apple", "Banana", "Cherry");
for (String fruit : fruits) {System.out.println(fruit);
}

Kotlin:

// 范围for循环
for (i in 0 until 5) {println(i)
}// 步长for循环
for (i in 0..10 step 2) {println(i)  // 输出0, 2, 4, 6, 8, 10
}// 倒序for循环
for (i in 5 downTo 1) {println(i)  // 输出5, 4, 3, 2, 1
}// while循环
var j = 0
while (j < 5) {println(j)j++
}// do-while循环
var k = 0
do {println(k)k++
} while (k < 5)// 集合遍历
val fruits = listOf("Apple", "Banana", "Cherry")
for (fruit in fruits) {println(fruit)
}// 带索引的集合遍历
for ((index, fruit) in fruits.withIndex()) {println("$index: $fruit")
}

Dart:

// 标准for循环
for (int i = 0; i < 5; i++) {print(i);
}// while循环
int j = 0;
while (j < 5) {print(j);j++;
}// do-while循环
int k = 0;
do {print(k);k++;
} while (k < 5);// 集合遍历
List<String> fruits = ["Apple", "Banana", "Cherry"];
for (var fruit in fruits) {print(fruit);
}// 带索引的集合遍历
for (int i = 0; i < fruits.length; i++) {print("${i}: ${fruits[i]}");
}

Python:

# 范围for循环
for i in range(5):print(i)# 带步长的范围
for i in range(0, 11, 2):print(i)  # 输出0, 2, 4, 6, 8, 10# while循环
j = 0
while j < 5:print(j)j += 1# 集合遍历
fruits = ["Apple", "Banana", "Cherry"]
for fruit in fruits:print(fruit)# 带索引的集合遍历
for index, fruit in enumerate(fruits):print(f"{index}: {fruit}")

ArkTS:

// 标准for循环
for (let i = 0; i < 5; i++) {console.log(i);
}// while循环
let j = 0;
while (j < 5) {console.log(j);j++;
}// do-while循环
let k = 0;
do {console.log(k);k++;
} while (k < 5);// 集合遍历
let fruits: string[] = ["Apple", "Banana", "Cherry"];
for (let fruit of fruits) {console.log(fruit);
}// 带索引的集合遍历
for (let i = 0; i < fruits.length; i++) {console.log(`${i}: ${fruits[i]}`);
}// 使用forEach方法
fruits.forEach((fruit, index) => {console.log(`${index}: ${fruit}`);
});

Swift:

// 范围for循环
for i in 0..<5 {print(i)
}// 步长for循环
for i in stride(from: 0, to: 11, by: 2) {print(i)  // 输出0, 2, 4, 6, 8, 10
}// while循环
var j = 0
while j < 5 {print(j)j += 1
}// repeat-while循环 (相当于do-while)
var k = 0
repeat {print(k)k += 1
} while k < 5// 集合遍历
let fruits = ["Apple", "Banana", "Cherry"]
for fruit in fruits {print(fruit)
}// 带索引的集合遍历
for (index, fruit) in fruits.enumerated() {print("\(index): \(fruit)")
}

2.3 跳转语句

各语言跳转语句的语法对比:

语言breakcontinuereturn标签跳转
Javabreak;continue;return [value];label: for(...) { break label; }
Kotlinbreakcontinuereturn [value]@label for(...) { break@label }
Dartbreak;continue;return [value];label: for(...) { break label; }
Pythonbreakcontinuereturn [value]无直接支持
ArkTSbreak;continue;return [value];label: for(...) { break label; }
Swiftbreakcontinuereturn [value]label: for {...} break label
示例对比

Java:

// break语句
for (int i = 0; i < 10; i++) {if (i == 5) {break;  // 跳出循环}System.out.println(i);  // 输出0, 1, 2, 3, 4
}// continue语句
for (int i = 0; i < 10; i++) {if (i % 2 == 0) {continue;  // 跳过当前迭代}System.out.println(i);  // 输出1, 3, 5, 7, 9
}// return语句
public int sum(int a, int b) {return a + b;  // 返回结果并退出方法
}// 标签跳转
outer: for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {if (i == 1 && j == 1) {break outer;  // 跳出外层循环}System.out.println(i + ", " + j);}
}

Kotlin:

// break语句
for (i in 0 until 10) {if (i == 5) {break  // 跳出循环}println(i)  // 输出0, 1, 2, 3, 4
}// continue语句
for (i in 0 until 10) {if (i % 2 == 0) {continue  // 跳过当前迭代}println(i)  // 输出1, 3, 5, 7, 9
}// return语句
fun sum(a: Int, b: Int): Int {return a + b  // 返回结果并退出函数
}// 标签跳转
outer@ for (i in 0 until 3) {for (j in 0 until 3) {if (i == 1 && j == 1) {break@outer  // 跳出外层循环}println("$i, $j")}
}

Dart:

// break语句
for (int i = 0; i < 10; i++) {if (i == 5) {break;  // 跳出循环}print(i);  // 输出0, 1, 2, 3, 4
}// continue语句
for (int i = 0; i < 10; i++) {if (i % 2 == 0) {continue;  // 跳过当前迭代}print(i);  // 输出1, 3, 5, 7, 9
}// return语句
int sum(int a, int b) {return a + b;  // 返回结果并退出函数
}// 标签跳转
outer: for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {if (i == 1 && j == 1) {break outer;  // 跳出外层循环}print('$i, $j');}
}

Python:

# break语句
for i in range(10):if i == 5:break  # 跳出循环print(i)  # 输出0, 1, 2, 3, 4# continue语句
for i in range(10):if i % 2 == 0:continue  # 跳过当前迭代print(i)  # 输出1, 3, 5, 7, 9# return语句
def sum(a, b):return a + b  # 返回结果并退出函数# Python没有直接的标签跳转,但可以用函数或其他方式模拟
def nested_loops():for i in range(3):for j in range(3):if i == 1 and j == 1:return  # 使用return退出整个函数print(f"{i}, {j}")nested_loops()

ArkTS:

// break语句
for (let i = 0; i < 10; i++) {if (i == 5) {break;  // 跳出循环}console.log(i);  // 输出0, 1, 2, 3, 4
}// continue语句
for (let i = 0; i < 10; i++) {if (i % 2 == 0) {continue;  // 跳过当前迭代}console.log(i);  // 输出1, 3, 5, 7, 9
}// return语句
function sum(a: number, b: number): number {return a + b;  // 返回结果并退出函数
}// 标签跳转
outer: for (let i = 0; i < 3; i++) {for (let j = 0; j < 3; j++) {if (i == 1 && j == 1) {break outer;  // 跳出外层循环}console.log(`${i}, ${j}`);}
}

Swift:

// break语句
for i in 0..<10 {if i == 5 {break  // 跳出循环}print(i)  // 输出0, 1, 2, 3, 4
}// continue语句
for i in 0..<10 {if i % 2 == 0 {continue  // 跳过当前迭代}print(i)  // 输出1, 3, 5, 7, 9
}// return语句
func sum(_ a: Int, _ b: Int) -> Int {return a + b  // 返回结果并退出函数
}// 标签跳转
outerLoop: for i in 0..<3 {for j in 0..<3 {if i == 1 && j == 1 {break outerLoop  // 跳出外层循环}print("\(i), \(j)")}
}

总结

通过对比六种移动端开发语言的基础语法和控制结构,我们可以发现:

  1. 语法风格

    • Java和Dart语法相对传统,需要分号结尾
    • Kotlin和Swift语法更现代简洁,省略了很多冗余符号
    • Python使用缩进表示代码块,语法最为简洁
    • ArkTS语法接近TypeScript,结合了静态类型和现代语法特性
  2. 类型系统

    • Java、Kotlin、Dart、ArkTS和Swift都是静态类型语言
    • Python是动态类型语言,不需要显式声明类型
    • Kotlin、Dart、ArkTS和Swift都支持类型推断,减少了代码冗余
  3. 空值处理

    • Kotlin、Dart、ArkTS和Swift都有现代的空值处理机制(如?.??等)
    • Java传统上使用null检查,但Java 8+引入了Optional
    • Python使用None值和is检查
  4. 控制结构

    • 基本控制结构(if-else、循环)在各语言中概念相似但语法有差异
    • Kotlin的when和Swift的switch功能更强大,支持更复杂的模式匹配
    • Python没有switch语句,通常用字典或if-elif替代
    • 各语言的集合遍历语法各有特色,但都支持简洁的迭代方式

理解这些语言间的异同,有助于开发者在不同平台间快速切换,提高跨平台开发效率。在后续文章中,我们将继续探讨这些语言在函数、数据结构、面向对象编程等方面的差异。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/75178.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux-线程概念与线程控制的常用操作

一.Linux线程概念 1-1.线程是什么 在Linux中&#xff0c;线程是基于Linux原有的进程实现的。本质是轻量级进程(LWP)。在⼀个程序⾥的⼀个执⾏路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“⼀个进程内部的控制序列”。 我们之前所学习的进…

dfs记忆化搜索刷题 + 总结

文章目录 记忆化搜索 vs 动态规划斐波那契数题解代码 不同路径题解代码 最长递增子序列题解代码 猜数字大小II题解代码 矩阵中的最长递增路径题解代码 总结 记忆化搜索 vs 动态规划 1. 记忆化搜索&#xff1a;有完全相同的问题/数据保存起来&#xff0c;带有备忘录的递归 2.记忆…

【HTML】验证与调试工具

个人主页&#xff1a;Guiat 归属专栏&#xff1a;HTML CSS JavaScript 文章目录 1. HTML 验证工具概述1.1 验证的重要性1.2 常见 HTML 错误类型 2. W3C 验证服务2.1 W3C Markup Validation Service2.2 使用 W3C 验证器2.3 验证结果解读 3. 浏览器开发者工具3.1 Chrome DevTools…

认识rand, srand, time函数,生成随机数

要完成猜数字游戏&#xff0c;首先要生成随机数&#xff0c;那么该怎么生成随机数&#xff1f;、 1.rand函数 rand函数是库函数&#xff0c;使用的时候要使用头文件stdlib.h c语言中&#xff0c;提供了rand函数来生成随机数&#xff0c;来看一下函数使用&#xff1a; 但是r…

BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测(Matlab)

BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测&#xff08;Matlab&#xff09; 目录 BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测&#xff08;Matlab&#xff09;预测效果基本介绍程序设计参考资料 预测效果 基本介绍 BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多…

Go语言从零构建SQL数据库引擎(2)

SQL标准与数据库系统实现差异 在上一节中&#xff0c;我们了解了关系型数据库的基础概念。现在&#xff0c;让我们深入探讨SQL语言标准以及不同数据库系统之间的实现差异。 SQL语言的诞生与演进 想象你经营的咖啡店生意蒸蒸日上&#xff0c;需要一个更强大的系统来管理数据。…

智能导诊系统的技术体系组成

智能导诊系统的技术体系由基础支撑技术、核心交互技术、应用场景技术及安全保障技术构成&#xff0c;具体可归纳为以下六个维度&#xff1a; 一、基础支撑技术 1、AI大模型与深度学习 医疗大模型&#xff1a;如腾讯医疗AI、DeepSeek等&#xff0c;通过海量医学文献和病例训…

QML输入控件: TextField(文本框)的样式定制

目录 引言示例简介示例代码与关键点示例1&#xff1a;基础样式定制示例2&#xff1a;添加图标示例3&#xff1a;交互式元素&#xff08;清除按钮&#xff09; 实现要点总结完整工程下载 引言 在Qt Quick应用程序开发中&#xff0c;文本输入是最常见的用户交互方式之一。TextFi…

leetcode hot100 多维动态规划

1️⃣2️⃣ 多维动态规划&#xff08;区间 DP、状态机 DP&#xff09; 62. 不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图…

3.27学习总结 爬虫+二维数组+Object类常用方法

高精度&#xff1a; 一个很大的整数&#xff0c;以字符串的形式进行接收&#xff0c;并将每一位数存储在数组内&#xff0c;例如100&#xff0c;即存储为[1][0][0]。 p2437蜜蜂路线 每一个的路线数前两个数的路线数相加。 #include <stdio.h> int a[1005][1005]; int …

车载以太网网络测试-26【SOME/IP-通信方式-2】

目录 1 摘要2 Method &#xff08;FF/RR&#xff09;、Event、Filed介绍2.1. SOME/IP Method 接口2.1.1 **Fire & Forget (FF)** - 单向调用2.1.2 **Request/Response (RR)** - 请求/响应模式2.1.3 **车载ECU通信实现示例**:2.1.4 **通信序列示例**2.1.5 实现注意事项 2.2 …

把doi直接插入word中,然后直接生成参考文献

这段代码通过提取、查询、替换DOI&#xff0c;生成参考文献列表来处理Word文档&#xff0c;可按功能模块划分&#xff1a; 导入模块 import re from docx import Document from docx.oxml.ns import qn from habanero import Crossref导入正则表达式模块re用于文本模式匹配&a…

[C++] : C++11 右值引用的理解

&#xff08;一&#xff09;什么是左值和右值&#xff1f; 传统的C语法中就有引用的语法&#xff0c;而C11中新增了的右值引用语法特性&#xff0c;所以从现在开始我们 之前学习的引用就叫做左值引用。无论左值引用还是右值引用&#xff0c;都是给对象取别名。 1.左值 左值是一…

windows服务器切换到linux服务器踩坑点

单节点环境依赖性 单节点问题&#xff0c;影响业务可用性&#xff0c;windows影响后续自动化&#xff0c;健壮性的提升&#xff0c;需要进行linux化 每个服务至少是双节点&#xff0c;防止单点故障&#xff0c;提升系统的可用性&#xff0c;健壮性。linux化后可以进行docker化…

美颜SDK兼容性挑战:如何让美颜滤镜API适配iOS与安卓?

如何让美颜滤镜API同时适配iOS与Android&#xff0c;并确保性能流畅、效果一致&#xff0c;是开发者面临的一大挑战。今天&#xff0c;我将与大家一同深度剖析美颜SDK的跨平台兼容性问题&#xff0c;并分享优化适配方案。 一、美颜SDK兼容性面临的挑战 1.1不同平台的图像处理框…

Vue3 表单

Vue3 表单 随着前端技术的发展,Vue.js 作为一款流行的前端框架,不断更新迭代,以适应更高效、更便捷的开发需求。Vue3 作为 Vue.js 的第三个主要版本,引入了许多新特性和改进,其中包括对表单处理机制的优化。本文将深入探讨 Vue3 表单的使用方法、技巧以及注意事项。 1. …

笔记:代码随想录算法训练营day62:108.冗余连接、109.冗余连接II

学习资料&#xff1a;代码随想录 108. 冗余连接 卡码网题目链接&#xff08;ACM模式&#xff09; 判断是否有环的依据为&#xff0c;利用并查集&#xff0c;isSame函数&#xff0c;判断当下这条边的两个节点入集前是否为同根&#xff0c;如果是的话&#xff0c;该边就是会构…

RK3588,V4l2 读取Gmsl相机, Rga yuv422转换rgb (mmap)

RK3588, 使用V4l2 读取 gmsl 相机,获得yuv422格式图像, 使用 rga 转换 rgb 图像。减少cpu占用率. 内存管理方式采用 mmap… 查看相机信息 v4l2-ctl --all -d /dev/cam0 , 查看自己相机分辨率,输出格式等信息,对应修改后续代码测试… Driver Info:Driver name : rkcif…

Kubernetes》k8s》Containerd 、ctr 、cri、crictl

containerd ctr crictl ctr 是 containerd 的一个客户端工具。 crictl 是 CRI 兼容的容器运行时命令行接口&#xff0c;可以使用它来检查和调试 k8s 节点上的容器运行时和应用程序。 ctr -v 输出的是 containerd 的版本&#xff0c; crictl -v 输出的是当前 k8s 的版本&#x…

Vue 入门到实战 十一 Vuex

目录 11.1状态管理与应用场景 1&#xff09;state 2&#xff09;Getters 3&#xff09;Mutations 4&#xff09;Actions 5&#xff09;Module 11.2Vuex的安装与基本应用 11.3Vuex的核心概念 一句话解释vuex&#xff1a;就是单独成立一个组件&#xff0c;这个组件存储共…