Dart中的常用运算符、算法汇总

2,134 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情

前言

  • 我们在绘制自定义组件的时候,通常需要去计算一些坐标点,除了加减乘除以外,还需要一些特殊的角度、弧度计算等,这些不怎么常用的算法dart基本都内置支持了,下面对这些运算符以及一些方法做一个汇总记录整理。

1、运算符

  • num 计算运算符

dart基本数据类型num;代表整数或者浮点数。 +-*/++--+=-=跟java基本一样。
%:取余。例:10 % 3 = 1;

num operator %(num other);

~/dart特有的,截断取整 也就是向前取整。例:3.6 ~/ 2 = 1;

num operator ~/(num other);
  • 位运算符: 运算符 | 描述 | | ------ | ------------------------------ | | & | 按位与 都为1返回1 | | \| | 按位或 有1个1返回1 | | ^ | 按位异或 相同=1,不同=0 | | ~表达式 | 按位取反(即将 “0” 变为 “1”,“1” 变为 “0”) | | << | 位左移 缺位补0 | | >> | 位右移 缺位补0 |

位运算符是以二进制对应的0、1来计算的, & 相同位数为都为1,返回1。
例如:
2 = 0010;
3 = 0011;
那么得出:
2 & 3 = 0010 = 2;
2 | 3 = 0011 = 3;
2 ^ 3 = 0001 = 1;
~2 = -3; //这里需要进行补码,有兴趣可以了解下
2 >> 1 = 1; 2 << 1 = 4;
位运算是通过机器语言二进制来进行计算的,常用位运算对性能有很好的提升。但是一定要写好注释,因为位运算的代码可读性不怎么样。毕竟机器语言。

  • num 方法 int round();取整:最接近这个数,(3.4).round() = 3; and (-3.5).round() = -4;
    int floor();取整:不大于这个数,(3.5).floor() = 3; and (-3.5).floor() = -4;
    int ceil();取整:不小于这个数,(3.4).round() = 4; and (-3.5).round() = -3;
    int truncate();取整:去掉小数中的小数,(3.5).truncate() = 3; and (-3.5).truncate() = -3; toStringAsFixed(int fractionDigits); 取小数点后几位,返回字符串。’1.toStringAsFixed(3) = 1.000;
    compareTo(num other);比较大小,相等返回0,排序中常用。
//例:
int compareTo(num other);
print(1.compareTo(2)); // => -1
print(2.compareTo(1)); // => 1
print(1.compareTo(1)); // => 0

abs取绝对值。
remainder 取余。

    /// a.remainder(b); 等同于 a % b;
num remainder(num other); 

bool isNaN判断是否为NaN;(0/0)= NaN
bool isNegative判断是否为负数;-1.isNegative = true
bool isInfinite判断是否为正负无穷大;double.infinity 或.negativeInfinity = true
bool isFinite判断这个数是否有限;double.infinity.isFinite = false
num sign返回这个数的符号;这个数如果>0 返回 1; =0 返回0; <0 返回 -1

  • 类型判断运算符:
    as 类型转换 a as b 将a类型转换为b类型。
    is 类型判断 如果对象是指定类型则返回 true。
    is!类型判断 如果对象是指定类型则返回 false。
  • 其他还有一些关系运算符、赋值运算符很常见就不一一列举了。

2、math常用算法

  • 导入:dart.math;
import 'dart:math';

常量

/// 自然对数的底数 用e表示 e是一个无限不循环小数
/// 计算方法:e = (1+1/n)的n次方 n趋于无穷大∞
const double e = 2.718281828459045;
/// 10的自然对数
const double ln10 = 2.302585092994046;
  • 自然对数概念: 自然对数是以常数e为底数对数,记作lnN(N>0)。在物理学,生物学等自然科学中有重要的意义,一般表示方法为lnx。数学中也常见以logx表示自然对数。
/// PI常量 = π 一般计算角度弧度会用到 1pi = 180°;
const double pi = 3.1415926535897932;
/// 根号1/2
const double sqrt1_2 = 0.7071067811865476;
/// 根号2
const double sqrt2 = 1.4142135623730951;

方法

  • 比较 min 取两者中的较小值。
external T min<T extends num>(T a, T b);

max 取两者中的较大值。

external T max<T extends num>(T a, T b);
  • 计算 pow 返回x的e次方。
external num pow(num x, num e);

sqrt 返回x的的平方根。

external num sqrt(num x);

exp 返回e的的x次方。

external num exp(num x);

log 返回x的自然对数。

external num log(num x);
  • 角度计算相关 一般在自定义绘制中经常会用到角度、弧度的计算。

sin 取当前弧度的正弦值。 asin 反正弦。
例 :sin90° = 1,程序中pi代表弧度180°。
所以:sin(pi/2) = 1asin(1) = pi/2; 下同,看不懂的去找高中老师0.0。

external double sin(num radians);

cos 取当前弧度的余弦值。acos 反余弦。

external double cos(num radians);

tan 取当前弧度的正切值。atan 反正切。

external double cos(num radians);

atan2 上面传入的是pi类型的弧度,这个方法传入具体的坐标点,等同于三角形中的边长, 如果b>0,等同于atan(a/b),返回角度,范围:-pi - pi

external double atan2(num a, num b);

总结

算法基本都是高中数学的知识,整理的过程中发现有些高中的知识已经都还给数学老师了,泪奔~...比如:对数、自然对数,正弦、反正弦基本都忘光了,绘制过程遇到一些常用的算法,正好整理记录重新学习下。

参考官方文档链接:dart.cn/guides/lang…