鸿蒙NEXT开发案例:程序员计算器

【环境准备】
• 操作系统:Windows 10
• 开发工具:DevEco Studio 5.0.1 Release Build Version: 5.0.5.306
• 目标设备:华为Mate60 Pro
• 开发语言:ArkTS
• 框架:ArkUI
• API版本:API 13
【项目背景与价值】
在程序员日常开发中,常常需要进行复杂的数学运算(如三角函数、复数计算、幂运算等),但传统计算器存在以下痛点:
1、表达式支持有限:多数不支持括号嵌套或多函数组合
2、科学函数分散:需要多次点击查找功能按钮
本项目基于鸿蒙NEXT的Web组件能力,结合JavaScript的eval函数,打造支持任意数学表达式的专业计算器。典型使用场景:
// 复数运算
Math.sqrt(-4) * 2 → 4i
// 三角函数组合
Math.sin(Math.PI/2) + Math.cos(0) → 2
// 复杂表达式
(2+3)*Math.pow(2,5)/Math.sqrt(9) → 53.333
【技术实现方案】
1、系统架构设计
采用三层架构模式:
表现层:ArkUI构建可视化界面
逻辑层:Web组件执行JavaScript计算
通信层:JavaScriptProxy实现双向通信
2、关键技术选型

【核心代码解析】
1、通信桥接实现
// 计算服务类
class CalculatorService {
// 结果回调方法
postResult = (result: string) => {
this.context.eventHub.emit('formulaEvaluated', result);
}
} // Web组件配置
Web({
src: $rawfile('eval.html'),
controller: this.webController
})
.javaScriptProxy({
name: "harmonyBridge",
object: this.calculatorService,
methodList: ['postResult']
})
实现要点:
使用javaScriptProxy建立双向通道
通过命名空间harmonyBridge暴露原生方法
2、表达式计算流程
<!-- eval.html -->
<script>
function evaluateExpression(expr) {
try {
const result = eval(expr);
harmonyBridge.postResult(String(result));
} catch (e) {
harmonyBridge.postResult(`错误: ${e.message}`);
}
}
</script>
调用
// 点击计算按钮时
this.webController.runJavaScript(`evaluateExpression('${this.formulaInput}')`);
安全机制:
try-catch包裹eval执行
错误信息统一处理
结果强制转换为字符串
3、输入优化设计
// 智能插入推荐表达式
Text(' Math.sin() ')
.onClick(() => {
const pos = this.inputController.getCaretOffset().index;
this.formulaInput =
this.formulaInput.slice(0, pos) +
' Math.sin() ' +
this.formulaInput.slice(pos);
})
交互亮点:
保留函数参数占位符()
自动维护光标位置
【总结】
本方案创新性地利用鸿蒙Web组件解决了ArkTS无法直接执行动态表达式的难题,主要优势体现在:
功能强大:完整支持JavaScript数学库
体验优秀:开发者友好的输入体验
扩展灵活:模块化架构设计
完整代码已开源:https://gitee.com/zhong-congxu/calculator20250322
鸿蒙NEXT开发案例:程序员计算器的更多相关文章
- 【VS开发】程序员对内存的理解
程序员对内存的理解 在C和C++语言开发中,指针.内存一直是学习的重点.因为C语言作为一种偏底层的中低级语言,提供了大量的内存直接操作的方法,这一方面使程序的灵活度最大化,同时也为bug埋下很多隐患. ...
- 0基础入门 docker 部署 各种 Prometheus 案例 - 程序员学点xx 总集篇
目录 大家好, 学点xx 系列也推出一段时间了.虽然 yann 能力有限,但还是收到了很多鼓励与赞赏.对这个系列 yann 还是很喜欢的,特别是 Prometheus 篇,在期间经历公众号 100 篇 ...
- win8找到程序员计算器
最近想用计算器的十进制和十六进制转化的功能,发现win8没有开始菜单了,从网上查了查,原来指令如此简单,特此做笔记,谨防忘记! 操作:win+r打开运行,输入calc,确定就出来了!
- php微信支付(仅pc端扫码支付模式二)详细步骤.----仅适合第一次做微信开发的程序员
本人最近做了微信支付开发,是第一次接触.其中走了很多弯路,遇到的问题也很多.为了让和我一样的新人不再遇到类似的问题,我把我的开发步骤和问题写出来,以供参考. 开发时间是2016/8/10,所以微信支付 ...
- php微信支付(仅Jsapi支付)详细步骤.----仅适合第一次做微信开发的程序员
本人最近做了微信支付开发,是第一次接触.其中走了很多弯路,遇到的问题也很多.为了让和我一样的新人不再遇到类似的问题,我把我的开发步骤和问题写出来,以供参考. 开发时间是2016/8/2,所以微信支付的 ...
- 程序员计算器HEX、EDC、OCT等等的意思
binary 二进制 对应的是 BINoctal 八进制的 ---- OCThexadecimal 十六进制的 --- HEXdecimal 十进制的 -- DEC
- Android开发java程序员常用代码,将字符串以逗号分别取出字符串String
public class StringSplit { public static void main(String[] args) { String sourceStr = "1,2,3,4 ...
- java工具类去掉字符串String中的.点。android开发java程序员常用工具类
下面是工具类详细代码: package com.qq986945193.david; /** * qq986945193 Project * ============================= ...
- 10年.NET老程序员推荐的7个开发类工具
做.NET软件工作已经10年了,从程序员做 到高级程序员,再到技术主管,技术总监.见证了Visual Studio .NET 2003,Visul Studio 2005, Visual Studio ...
- 浅谈入行Qt桌面端开发程序员-从毕业到上岗(1):当我们说到桌面端开发时,我们在谈论什么?
谈谈我自己 大家好,我是轩先生,是一个刚入行的Qt桌面端开发程序员.我的本科是双非一本的数学专业,22年毕业,只是部分课程与计算机之间有所交叉,其实在我毕业的时候并没有想过会成为一名程序员,也没有想过 ...
随机推荐
- Hugo 静态博客部署
I. 前提条件 1.1 安装 Hugo 1.1.1 Windows 1.下载 Hugo(建议下载扩展版):Hugo(github.com) 2.解压 Hugo 压缩包到指定目录. 3.[Win + R ...
- Ubuntu Jack-server报错解决方案
报错关键部分如下: Communication error with Jack server (35), try 'jack-diagnose' or see Jack server log 究其原因 ...
- ATM 管理系统的设计与实现(类似毕业设计,附源代码)
ATM 管理系统的设计与实现 作者前言:本系统通过基本规范化的设计,简单的利用了java基本功能实现了ATM系统,本系统虽然简单,但是逻辑很严密,对于有一定java知识的读者有较大帮助,可以用作参考. ...
- manim边做边学--动画更新
今天介绍Manim中用于动画更新的3个类,分别是: UpdateFromFunc:根据自定义的函数来动态更新 Mobject 的属性 UpdateFromAlphaFunc:根据动画的进度来平滑地改变 ...
- w3cschool-Struts2 概述
Struts2 概述 Struts2 是目前较为普及和成熟的基于MVC设计模式的web应用程序框架,它不仅仅是Struts1 的升级版本,更是一个全新的Struts架构.最初,是以WebWork框架和 ...
- MongoDB:数据库操作
- ORACLE存储过程编程应用实例-门诊药房发药
最近两个整理了门诊药房发药的业务逻辑,准备通过存储过程实现数据处理.耗费两天时间验证终于完成,对存储过程的了解又深入了一些,总结如下: 1.游标的遍历使用了FOR IN语句进行循环,比FETCH与方便 ...
- GIS数据合集:作物、植被数据下载平台整理
本文对目前主要的作物类型与产量.植被物候与指数数据产品的获取网站加以整理与介绍. 目录 4 植被农业数据 4.1 作物产量数据 4.1.1 SPAM 4.1.2 Aerial Intelligen ...
- [车联网/计算机网络] Autosar 的 `ARXML` 配置数据库文件协议
序: 缘起 ARXML 概述 : Autosar 的 ARXML 配置数据库文件协议 ARXML 文件 ARXML文件: AUTOSAR系统描述文件,后缀*.arxml 实质是一个XML文件,一般通过 ...
- Rec out
"为你守夜" 在我这里蓝和灰是一种颜色 深蓝等于星灰. 当时看到星灰这个说法的时候,我说 星星怎么会是灰色的呢 在刻板印象里,星星和月亮一样是黄的 月亮有时候确实是黄的 但它颜色很 ...