移动端六大语言速记:第2部分 - 控制结构
移动端六大语言速记:第2部分 - 控制结构
本文继续对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言的控制结构,帮助开发者快速掌握各语言的语法差异。
2. 控制结构
2.1 条件语句
各语言条件语句的语法对比:
语言 | if语句 | 三元运算符 | switch/case | 空值处理 |
---|---|---|---|---|
Java | if (condition) {...} else if (condition) {...} else {...} | condition ? value1 : value2 | switch(var){case val: ... break;} | if(obj != null) |
Kotlin | if (condition) {...} else if (condition) {...} else {...} | if (condition) value1 else value2 | when(var){value -> ...} | ?. , ?: , !! |
Dart | if (condition) {...} else if (condition) {...} else {...} | condition ? value1 : value2 | switch(var){case val: ... break;} | ?. , ?? , !. |
Python | if condition: ... elif condition: ... else: ... | value1 if condition else value2 | 无原生支持,用字典或if-elif | if obj is not None |
ArkTS | if (condition) {...} else if (condition) {...} else {...} | condition ? value1 : value2 | switch(var){case val: ...} | ?. , ?? |
Swift | if condition {...} else if condition {...} else {...} | condition ? value1 : value2 | switch 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循环 | 迭代器/集合遍历 |
---|---|---|---|---|
Java | for(init;condition;update) | while(condition) | do {...} while(condition); | for(Type item : collection) |
Kotlin | for(i in range) | while(condition) | do {...} while(condition) | for(item in collection) |
Dart | for(init;condition;update) | while(condition) | do {...} while(condition); | for(var item in collection) |
Python | for i in range() | while condition: | 无原生支持 | for item in collection: |
ArkTS | for(init;condition;update) | while(condition) | do {...} while(condition); | for(let item of collection) |
Swift | for i in range | while condition | repeat {...} while condition | for 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 跳转语句
各语言跳转语句的语法对比:
语言 | break | continue | return | 标签跳转 |
---|---|---|---|---|
Java | break; | continue; | return [value]; | label: for(...) { break label; } |
Kotlin | break | continue | return [value] | @label for(...) { break@label } |
Dart | break; | continue; | return [value]; | label: for(...) { break label; } |
Python | break | continue | return [value] | 无直接支持 |
ArkTS | break; | continue; | return [value]; | label: for(...) { break label; } |
Swift | break | continue | return [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)")}
}
总结
通过对比六种移动端开发语言的基础语法和控制结构,我们可以发现:
-
语法风格:
- Java和Dart语法相对传统,需要分号结尾
- Kotlin和Swift语法更现代简洁,省略了很多冗余符号
- Python使用缩进表示代码块,语法最为简洁
- ArkTS语法接近TypeScript,结合了静态类型和现代语法特性
-
类型系统:
- Java、Kotlin、Dart、ArkTS和Swift都是静态类型语言
- Python是动态类型语言,不需要显式声明类型
- Kotlin、Dart、ArkTS和Swift都支持类型推断,减少了代码冗余
-
空值处理:
- Kotlin、Dart、ArkTS和Swift都有现代的空值处理机制(如
?.
、??
等) - Java传统上使用null检查,但Java 8+引入了Optional
- Python使用None值和is检查
- Kotlin、Dart、ArkTS和Swift都有现代的空值处理机制(如
-
控制结构:
- 基本控制结构(if-else、循环)在各语言中概念相似但语法有差异
- Kotlin的when和Swift的switch功能更强大,支持更复杂的模式匹配
- Python没有switch语句,通常用字典或if-elif替代
- 各语言的集合遍历语法各有特色,但都支持简洁的迭代方式
理解这些语言间的异同,有助于开发者在不同平台间快速切换,提高跨平台开发效率。在后续文章中,我们将继续探讨这些语言在函数、数据结构、面向对象编程等方面的差异。
相关文章:
移动端六大语言速记:第2部分 - 控制结构
移动端六大语言速记:第2部分 - 控制结构 本文继续对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言的控制结构,帮助开发者快速掌握各语言的语法差异。 2. 控制结构 2.1 条件语句 各语言条件语句的语法对比: …...
【 Vue 2 中的 Mixins 模式】
Vue 2 中的 Mixins 模式 在 Vue 2 里,mixins 是一种灵活的复用代码的方式,它能让你在多个组件间共享代码。借助 mixins,你可以把一些通用的选项(像 data、methods、computed 等)封装到一个对象里,然后在多…...
STM32F103_LL库+寄存器学习笔记13 - 梳理外设CAN与如何发送CAN报文(串行发送)
导言 CAN总线因其高速稳定的数据传输与卓越抗干扰性能,在汽车、机器人及工业自动化中被广泛应用。它采用分布式网络结构,实现多节点间实时通信,确保各控制模块精准协同。在汽车领域,CAN总线连接发动机、制动、车身系统,…...
DataPlatter:利用最少成本数据提升机器人操控的泛化能力
25年3月来自中科院计算所的论文“DataPlatter: Boosting Robotic Manipulation Generalization with Minimal Costly Data”。 视觉-语言-动作 (VLA) 模型在具身人工智能中的应用日益广泛,这加剧对多样化操作演示的需求。然而,数据收集的高成本往往导致…...
受控组件和非受控组件的区别
在 React 中,受控组件(Controlled Components) 和 非受控组件(Uncontrolled Components) 是处理表单元素的两种不同方式,它们的核心区别在于 数据管理的方式 和 与 React 的交互模式。 受控组件…...
Mhand Pro 多节点动作捕捉手套:一副手套多场景应用
随着动作捕捉技术的发展,动捕手套的出现为虚拟现实交互、VR游戏开发、机器臂/灵巧手遥操作等方面带来了更加便捷可行的方案。 广州虚拟动力作为一家在动作捕捉领域深耕多年的公司,基于传感器技术而研发的多节点惯性动作捕捉手套,兼具VR交互与…...
Kafka消息丢失全解析!原因、预防与解决方案
作为一名高并发系统开发工程师,在使用消息中间件的过程中,无法避免遇到系统中消息丢失的问题,而Kafka作为主流的消息队列系统,消息丢失问题尤为常见。 在这篇文章中,将深入浅出地分析Kafka消息丢失的各种情况…...
BERT与Transformer到底选哪个-上部
一、先理清「技术家谱」:BERT和Transformer是啥关系? 就像「包子」和「面食」的关系——BERT是「Transformer家族」的「明星成员」,而GPT、Qwen、DeepSeek这些大模型则是「Transformer家族」的「超级后辈」。 1.1 BERT:Transfor…...
【Unity】记录TMPro使用过程踩的一些坑
1、打包到webgl无法输入中文,编辑器模式可以,但是webgl不行,试过网上的脚本,还是不行 解决方法:暂时没找到 2、针对字体asset是中文时,overflow的效果模式处理奇怪,它会出现除了overflow模式以…...
数据处理的两种范式:深入解析OLTP与OLAP系统
目录 前言1. OLTP:业务运作的基石1.1 OLTP的核心定义与价值1.2 OLTP的技术架构特点1.3 OLTP的典型应用场景 2. OLAP:决策支持的大脑2.1 OLAP的基本概念与作用2.2 OLAP的技术实现方式2.3 OLAP的应用实践 3. OLTP与OLAP的对比与融合3.1 核心差异的深度解析…...
本地飞牛NAS快速部署WordPress个人网站并一键上线公网远程访问
文章目录 前言1. Docker下载源设置2. Docker下载WordPress3. Docker部署Mysql数据库4. WordPress 参数设置5. 飞牛云安装Cpolar工具6. 固定Cpolar公网地址7. 修改WordPress配置文件8. 公网域名访问WordPress 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗…...
windows环境下的cmake使用
创建一个目录testcmake 进入目录 创建一个文件main.cpp : #include <iostream> using namespace std; int main(){cout<<"what is going on?"<<endl;return 0; }再创建一个cmakelists.txt set(CMAKE_CXX_STANDARD 20) add_executable(test2 mai…...
多线程(多线程案例)(续~)
目录 一、单例模式 1. 饿汉模式 2. 懒汉模式 二、阻塞队列 1. 阻塞队列是什么 2. 生产者消费者模型 3. 标准库中的阻塞队列 4. 自实现阻塞队列 三、定时器 1. 定时器是什么 2. 标准库中的定时器 欢迎观看我滴上一篇关于 多线程的博客呀,直达地址…...
同步SVPWM调制策略的初步学习记录
最近项目需要用到一些同步调制SVPWM相关的内容(现在的我基本都是项目驱动了),因此对该内容进行一定的学习。 1 同步SVPWM调制的背景 我们熟知的一些知识是:SVPWM(空间矢量脉宽调制)是一种用于逆变器的调制…...
权重参数矩阵
目录 1. 权重参数矩阵的定义与作用 2. 权重矩阵的初始化与训练 3. 权重矩阵的解读与分析 (1) 可视化权重分布 (2) 统计指标分析 4. 权重矩阵的常见问题与优化 (1) 过拟合与欠拟合 (2) 梯度问题 (3) 权重对称性问题 5. 实际应用示例 案例1:全连接网络中的…...
堆叠虚拟化
各厂商叫法不同:思科 VSS 锐捷 VSU 华为 Stack 华三 IRF 虚拟化为一台设备进行管理,从而实现高可靠性。当任意交换机故障时,都能实现设备、链路切换,保护客户业务稳定运行 传统的园区网高可靠性技术出现故障时切换时间很难做到毫…...
3.31-4 性能面试题
面试题 1、性能问题的六个特征: (1)、持续缓慢: (2)、随着时间推进越来越慢、 (3)、随着负载增加越来越慢、 (4)、零星挂起或异常错误、 (5…...
2025年最新自动化/控制保研夏令营预推免面试真题分享(东南/浙大/华科清华)
笔者来2021级本科自动化专业,以下部分将介绍我在夏令营以及预推免期间发生经历和问题 东南大学自动化学院 东南大学: 东南大学面试有一个十分明显的特点,就是极其注重专业课,基本上就是在面试的时候电脑上会有几个文件夹&#x…...
freecad手动装插件 add on
python工作台输入 FreeCAD.ConfigGet("UserAppData") 在返回的地址上新建文件夹:Mod #like /home/chen/snap/freecad/common 进入Mod #like /home/chen/snap/freecad/common/Mod git clone 你要的项目 #like git clone https://github.com/looooo/f…...
mysql 主从搭建步骤
主库: 开启log-bin参数,log-bin 参数修改需要重启服务器 --You can change the server_id value dynamically by issuing a statement like this:SET GLOBAL server_id 2;--to enable binary logging using a log file name prefix of mysql-bin, and c…...
从AI大模型到MCP中台:构建下一代智能服务的核心架构
从AI大模型到MCP中台:构建下一代智能服务的核心架构 引言:AI大模型带来的服务重构革命 在ChatGPT掀起全球AI热潮的今天,大模型展现出的惊人能力正在重塑整个软件服务架构。但鲜为人知的是,真正决定AI服务成败的不仅是模型本身&a…...
31天Python入门——第18天:面向对象三大特性·封装继承多态
你好,我是安然无虞。 文章目录 面向对象三大特性1. 封装2. 继承3. 多态4. 抽象基类5. 补充练习 面向对象三大特性 面向对象编程(Object-Oriented Programming, 简称OOP)有三大特性, 分别是封装、继承和多态.这些特性是面向对象编程的基础, …...
css_z-index属性
z-index 工作原理及层叠上下文(Stacking Context) 在 CSS 中,z-index 主要用于控制元素的堆叠顺序,决定哪些元素显示在上层,哪些元素在下层。它的工作原理涉及 层叠上下文(Stacking Context)&a…...
ros2--xacro
什么是xacro 在ROS 2中,Xacro(XML Macros)是一种基于XML的宏语言,专门用于简化URDF(Unified Robot Description Format)文件的编写。它通过宏定义、变量替换和代码复用等功能,让机器人模型的描…...
Nordic 新一代无线 SoC nRF54L系列介绍
目录 概述 1 nRF54L系列特点 1.1 内存 1.2 芯片封装 2 增强的多协议支持 3 其他特性 4 nRF54L系列MCU特性 4.1 多协议无线电 4.2 安全性 4.3 存储空间 4.4 工作参数 4.5 调试接口 4.6 外设 概述 全新 nRF54L 系列的所有三款器件均将 2.4 GHz 无线电和 MCU 功能 (包括…...
力扣HOT100之矩阵:240. 搜索二维矩阵 II
这道题直接暴力AC的,虽然也能过,但是耗时太长了。 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int edge min(matrix.size(), matrix[0].size()) - 1; //先在edge * edge的矩阵中搜索for…...
一个判断A股交易状态的python脚本
最近在做股票数据相关的项目,需要用到判断某一天某个时刻A股的状态,比如休市,收盘,交易中等,发动脑筋想了一下,这个其实还是比较简单的,这里我把实现方法分享给大家。 思路 当天是否休市 对于某…...
为什么package.json里的npm和npm -v版本不一致?
这个情况出现是因为package.json里的 npm 版本和系统实际使用的 npm 版本是两个不同的概念。让我来解释一下: 原因解释 全局 npm vs 项目依赖: npm -v显示的是系统全局安装的 npm 版本(位于/usr/bin/npm或类似路径)package.jso…...
Rust 有问有答之 use 关键字
use 是什么# use 是 Rust 编程语言的关键字。using 是 编程语言 C# 的关键字。 关键字是预定义的保留标识符,对编译器有特殊意义。 using 关键字有三个主要用途: using 语句定义一个范围,在此范围的末尾将释放对象。 using 指令为命名空间创…...
[skip]CBAM
论文题目:CBAM: Convolutional Block Attention Module 中文题目:CBAM: 注意力卷积模块 0摘要 我们提出了卷积块注意力模块(CBAM),一个简单而有效的前馈卷积神经网络注意力模块。给定一个中间特征图,我们的模块沿着两个独立的维度(通道和空间)顺序推断注意力图,然后…...
突破反爬困境:SDK开发,浏览器模块(七)
声明 本文所讨论的内容及技术均纯属学术交流与技术研究目的,旨在探讨和总结互联网数据流动、前后端技术架构及安全防御中的技术演进。文中提及的各类技术手段和策略均仅供技术人员在合法与合规的前提下进行研究、学习与防御测试之用。 作者不支持亦不鼓励任何未经授…...
在MFC中使用Qt(四):使用属性表(Property Sheet)实现自动化Qt编译流程
前言 首先回顾下前面文章介绍的: 在MFC中使用Qt(一):玩腻了MFC,试试在MFC中使用Qt!(手动配置编译Qt) 在MFC中使用Qt(二):实现Qt文件的自动编译流…...
相机镜头景深
文章目录 定义影响因素实际应用特殊情况 参考:B站优致谱视觉 定义 景深是指在摄影机镜头或其他成像器前沿着能够取得清晰图像的成像器轴线所测定的物体距离范围。简单来说,就是在一张照片中,从前景到背景,能够保持清晰锐利的区域…...
HTML实现图片上添加水印的工具
HTML实现图片上添加水印的工具 本文介绍两种实现方式:图片上添加文字水印和图片上添加图片水印。部分源码参照自网络。 一、图片上添加文字水印 先看效果图: 源码如下: <!DOCTYPE html> <html lang"zh"> <head&…...
mysql JSON_ARRAYAGG联合JSON_OBJECT使用
父表数据(表名:class) idname1一年级2二年级3三年级 子表数据(表名:students) idnameclassId11张三112李四113小明3 sql查询(推荐使用方法一) 方法一 (使用IFNull判断子表数据是否…...
VMware虚拟机 ubuntu22.04无法与共享粘贴板和拖拽文件的解决方案
VMware虚拟机 ubuntu22.04无法与共享粘贴板和拖拉文件的解决方案 卸载VMware tools安装open-vm-tools还无法拖拽文件 卸载VMware tools 确保卸载完vmware-tools # 进入vmware-tools安装目录/bin sudo vmware-uninstall-tools.pl sudo rm -rf /usr/lib/vmware-tools sudo apt-…...
C++STL---<functional>
C标准库中的 <functional> 库是一个强大的工具集,它提供了用于处理函数对象、函数绑定、函数包装等功能的设施,极大地增强了代码的灵活性和可复用性。 1. 函数对象(Functors) 函数对象,也被称作仿函数…...
【Android】BluetoothSocket.connect () 的实现与协议栈交互源码解析
本文以 Android 蓝牙框架中的BluetoothSocket.connect()方法为切入点,深入剖析 Android 设备与远程蓝牙设备建立连接的全流程。从 Java 层的 API 调用出发,逐步追踪至 JNI 层的接口转发,最终进入 Buedroid 协议栈(RFCOMM/L2CAP 层),揭示蓝牙连接的核心机制。重点解析了权…...
算法导论(动态规划)——简单多状态
算法思路(17.16) 状态表示: 在处理线性动态规划问题时,我们可以通过“经验 题目要求”来定义状态表示。通常有两种选择: 以某个位置为结尾的情况;以某个位置为起点的情况。 本题中,我们选择更常…...
主成分分析(PCA)学习介绍及其高阶应用,金融风险分析
前言 主成分分析(Principal Component Analysis, PCA)是统计学中一种重要的降维技术。它通过寻找数据中各特征之间的线性关系,来降低数据的维度,同时保留数据中的主要信息。PCA在机器学习、信号处理、图像处理等领域广泛应用&…...
利用 SSRF 和 Redis 未授权访问进行内网渗透
目录 环境搭建 编辑 发现内网存活主机 编辑 扫描内网端口 编辑 利用 Redis 未授权访问进行 Webshell 写入 步骤1:生成 payload 方式1:使用python生成 payload 方式二:使用 Gopher 工具 步骤 2:写入 Webshell…...
计算机网络和因特网
目录 1、什么是Internet? 1.1定义 1.2具体构成描述 2、什么是协议? 2.1 服务描述 2.2 网络协议 3、网络边缘 3.1 定义与组成 3.2 模式 3.3服务 4、接入网、物理媒介 4.1、宽带有线接入网技术 4.2、宽带无线接入网技术 5、网络核心…...
1.oracle修改配置文件
1.找到oracle的安装路径 D:\app\baozi\product\11.2.0\dbhome_1\NETWORK\ADMIN ,修改下面的两个文件。如果提示没有权限,可以先把这两个文件复制到桌面,修改完后,在复制回来。 2.查看自己电脑的主机名, 右击 - 此电脑 …...
算法篇-------------双指针法
温馨提示:由于c语言在编程上更有优势,更加简洁,本文代码均为c代码,其他语言也可以 做,思想是不变的! 1.应用场景 涉及到对数组的操作的题目,可以考虑双指针方法解决 2.基…...
Java关于包和final
什么是包? 包就是文件夹。用来管理等各种不同功能的java类,方便后期代码维护 包名的规则:公司域名反写包的作用,需要全部英文小写,见名知意。例如:com.pdsu.domain package com.pdsu.demain;public class…...
2025年华为HCIP题库分享
1101、 【拖拽题】OPSF邻接关系建立的过程中需要使用不同的报文,那么请分别将以下各个状态和该状态使用的报文联系起来。 答题格式为:11 22 33 43 正确答案:【12】【21】【24】【33】 解析: 建立邻居关系 RouterA的一个连接到广…...
49. 字母异位词分组
leetcode Hot 100系列 文章目录 一、核心操作二、外层配合操作三、核心模式代码总结 一、核心操作 先把每一个词都排序,拍完之后相同的就是字母异位词使用map,排序完的作为key,一个string数组作为value对于每一个词,排完序之后将…...
python 语法篇(一)
目录 1 正则匹配注意点11.1 正则匹配字符串写法1.2 创建re函数(1)re.search()--搜索第一个匹配项(2)re.match() - 从字符串开头匹配(3)re.findall() - 返回所有匹配项的列表(4)re.fi…...
机器学习ML极简指南
机器学习是现代AI的核心,从推荐系统到自动驾驶,无处不在。但每个智能应用背后,都离不开那些奠基性的模型。本文用最简练的方式拆解核心机器学习模型,助你面试时对答如流,稳如老G。 线性回归 线性回归试图通过"最…...
爬虫:网络请求(通信)步骤,http和https协议
电脑(浏览器):www.baidu.com——url DNS服务器:IP地址标注服务器——1.1.38 DNS服务器返回IP地址给浏览器 浏览器拿到IP地址去访问服务器,返回响应 服务器返回给响应数据:html/css/js/jpg... html:文本 cs…...