Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >《深入浅出Dart》Dart库的使用和创建

《深入浅出Dart》Dart库的使用和创建

作者头像
linwu
发布于 2023-07-27 08:11:29
发布于 2023-07-27 08:11:29
22800
代码可运行
举报
文章被收录于专栏:编程时光编程时光
运行总次数:0
代码可运行

现代JavaScript高级小册

深入浅出Dart

现代TypeScript高级小册

Dart库的使用和创建

引言

在Dart中,代码重用和模块化可以通过库(libraries)和包(packages)实现。一个库就是一组代码,被一起打包为了实现一种或多种特定功能。一个包则是一种发布和分享Dart库的方式。在这一章,我们将详细介绍如何使用和创建Dart库和包,以及如何实现一个具有大数相加功能的库。

Dart库的使用

导入库

在Dart中,我们通过import关键字导入库。例如,要导入Dart的内置库dart:math,我们可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import 'dart:math';

我们也可以导入我们自己定义的库,或者从pub.dev安装的库。例如,如果我们有一个名为'big_numbers.dart'的库,我们可以这样导入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import 'package:my_app/big_numbers.dart';

使用库中的函数和类

导入库之后,就可以使用库中定义的函数和类了。例如,dart:math库中有一个sqrt函数,我们可以这样使用它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var squareRoot = sqrt(16);  // 输出:4.0

Dart库的创建

创建库文件

我们首先需要创建一个新的.dart文件。这个文件就是我们的库文件。例如,我们可以创建一个名为'big_numbers.dart'的文件。

定义库

在这个文件中,我们首先需要使用library关键字定义我们的库:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library big_numbers;

然后,我们可以在这个库中定义我们的函数和类。例如,我们可以定义一个用于大数相加的函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String addBigNumbers(String num1, String num2) {
  // 这里是函数的实现
}

导出库

如果我们的库中有一些函数和类是希望被其他库使用的,我们需要使用export关键字导出它们:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export 'src/big_numbers.dart';

注意,只有导出的函数和类才能被其他库使用。

实现一个大数相加的库

在我们的'big_numbers.dart'库中,我们现在来实现一个大数相加的函数。我们首先需要了解一下大数相加的基本思想:

对于大数相加,我们不能直接使用普通的加法运算,因为数字太大可能会溢出。因此,我们需要将大数转换为字符串,然后按位进行相加。

Dart语言提供了对大整数(BigInteger)的内置支持,即 BigInt 类。这种类型的整数可以是任意大小,只要你的计算机有足够的内存来存储它们,你可以直接使用加法运算符(+)来进行大整数的相加。

让我们来看看如何实现这个函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String addBigNumbers(String num1, String num2) {
  // 从最后一位(个位)开始相加
  int i = num1.length - 1;
  int j = num2.length - 1;

  int carry = 0; // 进位


  String result = '';

  // 从右到左,逐位相加
  while (i >= 0 || j >= 0) {
    int sum = carry;
    
    if (i >= 0) sum += num1[i--] - '0';
    if (j >= 0) sum += num2[j--] - '0';

    carry = sum ~/ 10; // 计算进位
    result = (sum % 10).toString() + result; // 计算当前位的值
  }

  // 如果最后还有进位,添加到结果的前面
  if (carry > 0) result = carry.toString() + result;

  return result;
}

Dart包的创建和发布

我们已经创建了一个'big_numbers.dart'库,现在我们可以将它打包为一个Dart包,并发布到pub.dev。

创建一个pubspec.yaml文件

首先,我们需要创建一个pubspec.yaml文件,这个文件用于描述我们的包的信息,包括名称、版本、描述等等。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
name: big_numbers
description: A Dart library for adding big numbers.
version: 1.0.0

environment:
  sdk: '>=2.10.0 <3.0.0'

dependencies:
  flutter:
    sdk: flutter

dev_dependencies:
  flutter_test:
    sdk: flutter

flutter:
  uses-material-design: true

发布包

然后,我们可以使用pub命令发布我们的包:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dart pub publish

注意,在发布包之前,我们需要确保我们已经注册了一个pub.dev的账号,并且在我们的计算机上配置了pub的认证信息。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
『Flutter』项目实战(苹果计算器)处理计算逻辑
%, 在实现 % 之前给大家介绍一下在 Flutter 中如何安装第三方库,因为这里我需要使用到一个第三方库来解决精度问题,所以需要先安装:
杨不易呀
2024/01/31
4301
『Flutter』项目实战(苹果计算器)处理计算逻辑
Dart学习笔记(六)——库
当引入的两个库具有相同的名称标识符的时候,会造成冲突。这个时候就可以使用as关键字来指定库的前缀。
拉维
2019/08/12
4430
Dart学习笔记(六)——库
Dart 中的库的引入与使用
在Dart中,library指令可以创建库,每个Dart文件都是一个库,即使没有使用library指令来指定,库的使用时通过import关键字引入。
越陌度阡
2020/12/11
1.2K0
Dart 中的库的引入与使用
《深入浅出Dart》Dart测试
Dart的生态系统提供了一个完善的测试框架来进行代码的单元测试和集成测试。以下是一些基本的测试知识。
linwu
2023/07/27
2250
Dart导入自定义库,系统内置库,第三方库
导入第三方库,以https://pub.dev/packages/date_format为例 链接地址 首页要在本地新建pubspec.yaml的文件
明知山
2020/09/03
7750
dart系列之:元世界pubspec.yaml文件详解
pubspec.yaml是所有dart项目的灵魂,它包含了所有dart项目的依赖信息和其他元信息,所以pubspec.yaml就是dart项目的meta!
程序那些事
2021/11/19
6970
发布package到pub.dev
最近写了一个SKU筛选器,将SKU的各种逻辑都封装进去了,而且算法上面对于时间和空间复杂度都进行了很长时间的优化,可以说这一款SKU筛选器是我近期最完美的一个作品了。
拉维
2022/03/28
1.1K0
发布package到pub.dev
Dart 点将台 | package 包相关知识
在 AndroidStudio 中,可以在 External Libraries 下查看存在的 Dart Packages。如下是一个新建项目存在的内置包。这些包中定义的公开类、方法、对象都可以在代码中使用。其实可以看出各种 Widget 只是 Flutter 框架的一部分,除了组件之外,还有很多其他的包。这里简单讲一下相关包的功能,不详细展开了。
张风捷特烈
2021/02/25
1.3K0
Dart 点将台 | package 包相关知识
我倒在了美团面试算法题:字符串大数相加
对这个算法,首先要考虑的是,怎么来遍历这 2 个数,可以用 2 个指针,分别指向这 2 个数的尾部,边计算边向左移动。
dongfanger
2020/11/12
6860
我倒在了美团面试算法题:字符串大数相加
《深入浅出Dart》Dart模块化
在大型软件项目中,模块化是必不可少的,它可以帮助我们更好地组织和管理代码,提高代码的可读性和可维护性。在Dart中,模块化是通过库(libraries)来实现的。
linwu
2023/07/27
2680
LeetCode-415-字符串相加
两数相加可以看成一个大数问题,只是这里是String类型的,思路都差不多。直接从字符串尾部开始遍历,设置一个进位符号,如果三者相加比10大说明有进位,此时的数应该%10即可,符号为设置为1,当没有进位的时候设置为0。两个字符串可能不是等长的,超过遍历的情况默认为0。循环结束之后,符号位为1的话说明最高位要进1
benym
2022/07/14
3260
leetcode-415-Add Strings
题目描述: Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and num2. Note: The length of both num1 and num2 is < 5100. Both num1 and num2 contains only digits 0-9. Both num1 and num2 does not contain any leading zero.
chenjx85
2018/05/22
4460
【LeetCode题解---2】Add Two Numbers
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
周三不加班
2019/09/04
3640
【LeetCode题解---2】Add Two Numbers
Flutter 知识集锦 | Dart 开发命令行工具
在开始本篇之前,请确保命令行中可以支持 dart 命令,如果没有请下载 Dart SDK 或者 Flutter SDK。
张风捷特烈
2024/02/07
3580
Flutter 知识集锦 |  Dart 开发命令行工具
《深入浅出Dart》Dart中使用JSON
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,它基于JavaScript的一个子集。在Dart中,你可以使用dart:convert库来进行JSON的编码和解码。
linwu
2023/07/27
5030
「Dart」库
使用 import 关键字导入库。你可以导入 Dart 的内置库,如 dart:math,也可以导入外部的库或自定义的库:
杨不易呀
2024/01/02
1551
「Dart」库
【模板小程序】十进制大数相加(正整数版本+整数版本【正负0】),包含合法性检查
为适应于不同用途,将大数算法写成了两个版本,分别为只处理正整数的版本和包含负数处理的版本,可根据需要选用。
xiaoxi666
2018/10/29
4210
【Flutter】Flutter 拍照示例 ( 创建应用 | 安装 image_picker 插件 )
创建 Flutter 应用 , 选择 菜单栏 / File / New / New Flutter Project 选项 , 在弹出的对话框中选择 Flutter Application ;
韩曙亮
2023/03/29
9860
【Flutter】Flutter 拍照示例 ( 创建应用 | 安装 image_picker 插件 )
leetcode 415. 字符串相加 js 实现
原题链接:https://leetcode.cn/problems/add-strings/
蓓蕾心晴
2022/09/24
1.7K0
就因为这道题,面字节差点儿就寄了...
我当时的想法是:“好像只听过2进制、8进制、16进制、32进制,62进制是什么鬼? ”
前端胖头鱼
2024/02/28
1300
就因为这道题,面字节差点儿就寄了...
相关推荐
『Flutter』项目实战(苹果计算器)处理计算逻辑
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文