当前位置: 首页 > article >正文

第7篇:功能——打造你的工具箱 Rust中文编程

第7篇功能——打造你的工具箱作者李金雨联系方式wbtm2718qq.com目标读者Rust中文编程核心理念AI时代必须使用中文编程母语编程阅读效率极高1. 开篇引入本课目标理解什么是函数掌握函数的定义方法掌握函数的调用方法理解函数的参数和返回值理解函数的嵌套调用生活场景引入想象一下你有一个工具箱里面有各种工具锤子用来钉钉子螺丝刀用来拧螺丝尺子用来测量长度计算器用来计算每个工具都有自己的用途你可以根据需要使用它们。在编程中函数就像这些工具每个函数都有自己的功能你可以调用它们来完成特定的任务。预期成果展示通过这节课的学习你将能够定义自己的函数调用函数来完成任务给函数传递参数接收函数的返回值理解函数的嵌套调用2. 概念讲解什么是函数函数就像一个工具它接收一些输入参数进行一些操作然后返回一个输出返回值。定义函数在Rust中我们使用fn关键字来定义函数fnmain(){fn函数名(参数1:类型1,参数2:类型2)-返回类型{// 函数体// 最后一行表达式的结果就是返回值}}例如fnmain(){// 定义一个加法函数fn加法(数字1:i32,数字2:i32)-i32{数字1数字2}// 定义一个打印函数fn打印(内容:str){println!({},内容);}}调用函数调用函数就像使用工具一样你需要提供必要的参数fnmain(){// 定义一个加法函数fn加法(数字1:i32,数字2:i32)-i32{数字1数字2}// 调用加法函数let结果加法(1,2);println!(1 2 {},结果);// 定义一个打印函数fn打印(内容:str){println!({},内容);}// 调用打印函数打印(你好世界);}函数参数函数参数就像工具的原材料你需要提供它们才能让工具工作fnmain(){// 定义一个计算面积的函数fn计算面积(长:f64,宽:f64)-f64{长*宽}// 调用函数let面积计算面积(5.0,3.0);println!(面积{},面积);}函数返回值函数返回值就像工具加工后的成品它是函数执行的结果fnmain(){// 定义一个计算平均值的函数fn计算平均值(数字们:[i32])-f64{letmut总和0;for数字in数字们{总和数字;}总和asf64/数字们.len()asf64}// 调用函数let数字们[1,2,3,4,5];let平均值计算平均值(数字们);println!(平均值{},平均值);}函数体和表达式函数体是函数的具体实现它由一系列语句组成。在Rust中函数的返回值通常是函数体的最后一个表达式fnmain(){fn函数名()-返回类型{// 语句1// 语句2// ...// 最后一个表达式就是返回值表达式}}你也可以使用return关键字来显式返回值fnmain(){fn比较大小(a:i32,b:i32)-i32{ifab{returna;}else{returnb;}}}函数调用函数函数可以调用其他函数这就是函数的嵌套调用fnmain(){// 定义一个计算平方的函数fn平方(数字:i32)-i32{数字*数字}// 定义一个计算平方根的函数fn平方根(数字:f64)-f64{数字.sqrt()}// 定义一个计算距离的函数fn计算距离(x1:i32,y1:i32,x2:i32,y2:i32)-f64{let差xx2-x1;let差yy2-y1;let平方和平方(差x)平方(差y);平方根(平方和asf64)}// 调用函数let距离计算距离(0,0,3,4);println!(距离{},距离);}内置函数和宏Rust提供了很多内置的函数和宏比如println!、String::from、vec!等fnmain(){// 使用内置函数let字符串String::from(你好);println!(字符串长度{},字符串.len());// 使用宏let数字们vec![1,2,3,4,5];println!(数字们{:?},数字们);}3. 动手实践基础练习必做制作数学工具箱创建一个程序包含求和、平均、最大最小值函数// 求和函数fn求和(数字们:[i32])-i32{letmut总和0;for数字in数字们{总和数字;}总和}// 平均函数fn平均(数字们:[i32])-f64{let总和求和(数字们);总和asf64/数字们.len()asf64}// 最大值函数fn最大值(数字们:[i32])-i32{letmut最大数字们[0];for数字in数字们{if数字最大{最大数字;}}最大}// 最小值函数fn最小值(数字们:[i32])-i32{letmut最小数字们[0];for数字in数字们{if数字最小{最小数字;}}最小}fnmain(){let数字们[1,2,3,4,5];println!(数字们{:?},数字们);println!(总和{},求和(数字们));println!(平均{},平均(数字们));println!(最大值{},最大值(数字们));println!(最小值{},最小值(数字们));}制作字符串工具箱创建一个程序包含统计字数、反转文字函数// 统计字数函数fn统计字数(文字:str)-usize{文字.chars().count()}// 反转文字函数fn反转文字(文字:str)-String{文字.chars().rev().collect()}fnmain(){let文字Hello, World!;println!(原文字{},文字);println!(字数{},统计字数(文字));println!(反转后{},反转文字(文字));}制作单位转换器创建一个程序包含长度、重量、温度转换函数// 长度转换公里转英里fn公里转英里(公里:f64)-f64{公里*0.621371}// 重量转换公斤转磅fn公斤转磅(公斤:f64)-f64{公斤*2.20462}// 温度转换摄氏度转华氏度fn摄氏度转华氏度(摄氏度:f64)-f64{摄氏度*9.0/5.032.0}fnmain(){let公里10.0;println!({}公里 {}英里,公里,公里转英里(公里));let公斤50.0;println!({}公斤 {}磅,公斤,公斤转磅(公斤));let摄氏度25.0;println!({}摄氏度 {}华氏度,摄氏度,摄氏度转华氏度(摄氏度));}进阶练习选做制作数学计算器创建一个程序包含加减乘除函数fn加法(a:f64,b:f64)-f64{ab}fn减法(a:f64,b:f64)-f64{a-b}fn乘法(a:f64,b:f64)-f64{a*b}fn除法(a:f64,b:f64)-f64{a/b}fnmain(){leta10.0;letb5.0;println!({} {} {},a,b,加法(a,b));println!({} - {} {},a,b,减法(a,b));println!({} * {} {},a,b,乘法(a,b));println!({} / {} {},a,b,除法(a,b));}制作判断函数创建一个程序包含判断是否为偶数、是否为素数函数// 判断是否为偶数fn是偶数(数字:i32)-bool{数字%20}// 判断是否为素数fn是素数(数字:i32)-bool{if数字1{returnfalse;}for除数in2..数字{if数字%除数0{returnfalse;}}true}fnmain(){let数字17;println!({}是否为偶数{},数字,是偶数(数字));println!({}是否为素数{},数字,是素数(数字));}挑战练习拓展制作综合性工具创建一个程序包含多个功能函数// 计算阶乘fn阶乘(数字:u32)-u64{if数字0||数字1{1}else{数字asu64*阶乘(数字-1)}}// 计算斐波那契数列fn斐波那契(数字:u32)-u64{if数字0{0}elseif数字1{1}else{斐波那契(数字-1)斐波那契(数字-2)}}// 生成随机数简单版本fn随机数(最大值:i32)-i32{usestd::time::SystemTime;let时间SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_secs()asi32;时间%(最大值1)}fnmain(){println!(5的阶乘{},阶乘(5));println!(斐波那契数列第10项{},斐波那契(10));println!(0-99的随机数{},随机数(99));}4. 知识总结核心概念回顾函数完成特定任务的代码块参数传递给函数的输入值返回值函数执行后返回的结果函数定义使用fn关键字定义函数函数调用通过函数名和参数调用函数函数体函数的具体实现表达式函数体中的代码最后一个表达式是返回值嵌套调用函数可以调用其他函数关键代码速查功能代码说明函数定义fn 函数名(参数: 类型) - 返回类型 { 代码 }定义一个函数函数调用函数名(参数)调用一个函数无返回值fn 函数名() {}函数没有返回值显式返回return 值;显式返回一个值表达式返回值函数体最后一个表达式作为返回值常见错误提醒参数类型不匹配调用函数时提供的参数类型与函数定义不匹配返回类型不匹配函数返回的值类型与函数定义的返回类型不匹配参数数量不匹配调用函数时提供的参数数量与函数定义不匹配函数未定义调用了未定义的函数5. 课后作业巩固练习题编写一个函数计算两个数的最大公约数编写一个函数将字符串转换为大写编写一个函数计算三角形的面积根据三边长度创意编程题发挥你的创意创建一个程序包含多个功能函数比如计算BMI指数、判断闰年等编写一个程序实现一个简单的密码生成器函数下篇预习提示下一篇我们将学习结构模板——自定义数据类型就像学习如何创建自己的模板来组织数据。预习一下什么是结构体如何定义结构体如何创建结构体实例如何访问和修改结构体字段恭喜你完成了第七篇教程你已经掌握了函数的定义和使用学会了如何打造自己的工具箱。继续加油下一篇我们将学习如何创建自定义数据类型学习交流如果你在学习过程中遇到任何问题欢迎联系我** 视频号“时空系”邮箱wbtm2718qq.com其他提示本人正在开发纯中文编程语言和编译器有兴趣的可以交流本人正在写一本基于中国母语思维习惯的数学教材可以让你一年内学完从初中到研究生的数学而且可以让你快速掌握人工智能的关键数学知识有兴趣的可以交流祝你学习愉快

相关文章:

第7篇:功能——打造你的工具箱 Rust中文编程

第7篇:功能——打造你的工具箱 作者: 李金雨 联系方式: wbtm2718qq.com 目标读者: Rust中文编程 核心理念: AI时代必须使用中文编程,母语编程阅读效率极高 1. 开篇引入 本课目标 理解什么是函数掌握函数的…...

为什么92%的电商风控系统上线即崩?Python实时决策代码的7个致命陷阱,你踩了几个?

更多请点击: https://intelliparadigm.com 第一章:电商实时风控系统的崩溃真相与Python代码的宿命关联 某头部电商平台在大促峰值期间突发风控服务雪崩,订单欺诈拦截率骤降47%,核心原因并非高并发压垮基础设施,而是Py…...

医疗设备采集丢帧率从3.7%降至0.002%:基于C语言静态内存池+环形FIFO+硬件时间戳的四级容错架构

更多请点击: https://intelliparadigm.com 第一章:C 语言医疗设备实时数据采集方法 在嵌入式医疗设备(如心电监护仪、血氧饱和度检测模块)中,C 语言凭借其确定性执行、内存可控与硬件级访问能力,成为实时数…...

Dalaix:模块化数据处理与可视化引擎的设计与实践

1. 项目概述:从零到一,构建一个高效的数据处理与可视化引擎最近在GitHub上看到一个名为“Dalaix”的项目,由开发者BenHerbst创建。这个项目名本身就很吸引人,它不像一个具体的应用,更像是一个平台或引擎的名字。点进去…...

2024年知识管理革命:用Obsidian Zettelkasten模板构建你的第二大脑

2024年知识管理革命:用Obsidian Zettelkasten模板构建你的第二大脑 【免费下载链接】Obsidian-Templates A repository containing templates and scripts for #Obsidian to support the #Zettelkasten method for note-taking. 项目地址: https://gitcode.com/gh…...

永久免费:小白转文字工具深度评测

在语音转文字这个领域,很多大厂的软件都有各种限制。 不开会员的话,往往有时长限制、字数限制,让人用得很不爽。 每次使用都要提心吊胆,担心超过限制还要付费。 这种体验让很多用户望而却步,希望能找到真正免费的替代品…...

10分钟训练专属AI声库:Retrieval-based-Voice-Conversion-WebUI终极指南

10分钟训练专属AI声库&#xff1a;Retrieval-based-Voice-Conversion-WebUI终极指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-ba…...

题解:AcWing 6026 最长公共子上升序列

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来&#xff0c;并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构&#xff0c;旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大…...

LaTeX2Word-Equation:学术写作中的公式转换解决方案

LaTeX2Word-Equation&#xff1a;学术写作中的公式转换解决方案 【免费下载链接】LaTeX2Word-Equation Copy LaTeX Equations as Word Equations, a Chrome Extension 项目地址: https://gitcode.com/gh_mirrors/la/LaTeX2Word-Equation 在学术研究和论文撰写过程中&…...

CSSTree词法分析器深度解析:基于W3C规范的CSS语法验证

CSSTree词法分析器深度解析&#xff1a;基于W3C规范的CSS语法验证 【免费下载链接】csstree A tool set for CSS including fast detailed parser, walker, generator and lexer based on W3C specs and browser implementations 项目地址: https://gitcode.com/gh_mirrors/c…...

碧蓝航线Alas脚本:5步快速配置,彻底告别重复肝船烦恼

碧蓝航线Alas脚本&#xff1a;5步快速配置&#xff0c;彻底告别重复肝船烦恼 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研&#xff0c;全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript …...

一次讲透:从“文字接龙“到“超级智能体“,大模型核心概念的血缘图谱

摘要: 在技术圈,我们每天都被 LLM、Agent、RAG、MCP 这些名词轰炸。它们看似孤立,实则是一场长达数年的"接力赛",每一项技术都是为了弥补前者的缺陷而生。本文将为你绘制一张大模型家族的"概念血缘图谱",用一条逻辑主线贯穿始终,让你看清这场 AI 浪潮…...

终极游戏回放分析平台:ReplayBook如何革新英雄联盟比赛数据管理

终极游戏回放分析平台&#xff1a;ReplayBook如何革新英雄联盟比赛数据管理 【免费下载链接】ReplayBook Play, manage, and inspect League of Legends replays 项目地址: https://gitcode.com/gh_mirrors/re/ReplayBook 在英雄联盟的竞技生态中&#xff0c;每场对局都…...

从航模电调到云台电机:聊聊FOC算法在不同场景下的调参实战与避坑指南

从航模电调到云台电机&#xff1a;FOC算法跨领域调参实战全解析 当你在航模电调上调试FOC参数时&#xff0c;那些让电机转速突破20000rpm的PID参数&#xff0c;放在云台电机上可能会直接导致镜头剧烈抖动。这种看似相同的算法在不同应用场景下的表现差异&#xff0c;正是FOC技术…...

《文字定律》后序 和 作者感言

后序&#xff1a; 作者英文不好&#xff0c;在处理中文书籍翻译英文的时候遇见了非常大的困难和阻碍。这个时候多亏了&#xff0c;deepseek、豆包、Grok、ChatGPT&#xff0c;他们每个都很独特而又宣明。 在这漫长的创作期间&#xff1a; Deepseek——是那个认真尽职&#x…...

如何快速在浏览器中实现H.264视频解码:Broadway.js完整入门指南

如何快速在浏览器中实现H.264视频解码&#xff1a;Broadway.js完整入门指南 【免费下载链接】Broadway A JavaScript H.264 decoder. 项目地址: https://gitcode.com/gh_mirrors/br/Broadway Broadway.js是一款强大的JavaScript H.264解码器&#xff0c;它能直接在浏览器…...

FidelityFX-FSR2模块化后端架构设计:如何为自定义图形API构建适配器

FidelityFX-FSR2模块化后端架构设计&#xff1a;如何为自定义图形API构建适配器 【免费下载链接】FidelityFX-FSR2 FidelityFX Super Resolution 2 项目地址: https://gitcode.com/gh_mirrors/fi/FidelityFX-FSR2 FidelityFX-FSR2&#xff08;FidelityFX Super Resoluti…...

利用 Taotoken 实现多模型路由以保障 AI 应用高可用

利用 Taotoken 实现多模型路由以保障 AI 应用高可用 1. 生产环境中的模型服务连续性挑战 在依赖大模型能力的生产系统中&#xff0c;单一模型供应商的服务稳定性可能成为业务连续性的潜在风险点。常见问题包括突发性服务降级、区域性访问波动或配额耗尽导致的不可用。传统直连…...

SignalR数据备份终极指南:5种消息历史记录存储策略详解

SignalR数据备份终极指南&#xff1a;5种消息历史记录存储策略详解 【免费下载链接】SignalR Incredibly simple real-time web for .NET 项目地址: https://gitcode.com/gh_mirrors/si/SignalR SignalR是一个为.NET开发者提供的实时web通信库&#xff0c;它能够轻松实现…...

3步掌握抖音无水印下载:从单视频到批量处理的完整指南

3步掌握抖音无水印下载&#xff1a;从单视频到批量处理的完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppo…...

Zettelkasten终极指南:如何用开源卡片盒笔记系统构建你的第二大脑

Zettelkasten终极指南&#xff1a;如何用开源卡片盒笔记系统构建你的第二大脑 【免费下载链接】Zettelkasten Zettelkasten-Developer-Builds 项目地址: https://gitcode.com/gh_mirrors/ze/Zettelkasten 还在为知识碎片化而烦恼吗&#xff1f;Zettelkasten卡片盒笔记系…...

VSCode/PyCharm里Python项目报错‘No module named chardet’?可能是你的虚拟环境在‘捣鬼’

当IDE说找不到chardet时&#xff1a;虚拟环境与解释器选择的深度解析 刚写完一段处理文本编码的Python代码&#xff0c;在终端测试一切正常&#xff0c;可一回到VSCode运行就弹出ModuleNotFoundError: No module named chardet——这个场景对Python开发者来说再熟悉不过。这不是…...

终极指南:如何用Cyber Engine Tweaks提升《赛博朋克2077》游戏性能

终极指南&#xff1a;如何用Cyber Engine Tweaks提升《赛博朋克2077》游戏性能 【免费下载链接】CyberEngineTweaks Cyberpunk 2077 tweaks, hacks and scripting framework 项目地址: https://gitcode.com/gh_mirrors/cy/CyberEngineTweaks Cyber Engine Tweaks是一款专…...

从文字到视频:TaleStreamAI如何用6小时完成AI小说推文全流程自动化

从文字到视频&#xff1a;TaleStreamAI如何用6小时完成AI小说推文全流程自动化 【免费下载链接】TaleStreamAI AI小说推文全自动工作流&#xff0c;自动从ID到视频 项目地址: https://gitcode.com/gh_mirrors/ta/TaleStreamAI 当传统小说推文制作需要数天时间&#xff0…...

别再只会用cv.threshold了!Floyd-Steinberg等4种图像抖动算法,用NumPy手撸一遍才明白

从零实现图像抖动算法&#xff1a;NumPy手写四大经典方法与性能优化实战 当你面对热敏打印机只能输出黑白二值图像的硬件限制时&#xff0c;如何让打印的照片保留更多细节&#xff1f;传统阈值二值化会丢失大量灰度过渡信息&#xff0c;而图像抖动技术通过空间分布模拟灰度变化…...

VMware Workstation Pro 17免费许可证密钥:虚拟机开发的完整激活指南

VMware Workstation Pro 17免费许可证密钥&#xff1a;虚拟机开发的完整激活指南 【免费下载链接】VMware-Workstation-Pro-17-Licence-Keys Free VMware Workstation Pro 17 full license keys. Weve meticulously organized thousands of keys, catering to all major versio…...

7天入门DeepLearningPython:从0掌握前馈神经网络与反向传播算法

7天入门DeepLearningPython&#xff1a;从0掌握前馈神经网络与反向传播算法 【免费下载链接】DeepLearningPython neuralnetworksanddeeplearning.com integrated scripts for Python 3.5.2 and Theano with CUDA support 项目地址: https://gitcode.com/gh_mirrors/de/DeepL…...

为什么MemReduct重启后语言设置会失效?3个关键步骤彻底解决

为什么MemReduct重启后语言设置会失效&#xff1f;3个关键步骤彻底解决 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct …...

Ubuntu Server 22.04.4安装后必做的10件事:从基础配置到Docker环境一键部署

Ubuntu Server 22.04.4安装后必做的10件事&#xff1a;从基础配置到Docker环境一键部署 当你第一次登录到全新的Ubuntu Server系统时&#xff0c;面对这个干净但略显陌生的环境&#xff0c;可能会感到有些无从下手。作为一款广受欢迎的企业级Linux发行版&#xff0c;Ubuntu Ser…...

终极鼠标连点器:免费开源工具,5分钟解放你的双手

终极鼠标连点器&#xff1a;免费开源工具&#xff0c;5分钟解放你的双手 【免费下载链接】MouseClick &#x1f5b1;️ MouseClick &#x1f5b1;️ 是一款功能强大的鼠标连点器和管理工具&#xff0c;采用 QT Widget 开发 &#xff0c;具备跨平台兼容性 。软件界面美观 &#…...