函数式编程 - 数据类型
数据类型定义了对象可以具有的值类型以及可以对其执行的操作。在使用数据类型之前,应先声明它。不同的编程语言支持不同的数据类型。例如:
- C语言支持char、int、float、long等。
- Python支持字符串、列表、元组等。
广义上讲,数据类型分为三种:
基本数据类型 - 这些是程序员直接使用的预定义数据类型,用于根据需要存储单个值,例如整数类型、字符类型或浮点类型。例如 - int、char、float 等。
派生数据类型 - 这些数据类型是使用内置数据类型派生的,由程序员设计用于根据需要存储相同类型多个值。例如 - 数组、指针、函数、列表等。
用户自定义数据类型 - 这些数据类型是使用内置数据类型派生的,它们被封装成单个数据类型,用于根据需要存储相同类型、不同类型或同时存储这两种类型的多个值。例如 - 类、结构体等。
C++支持的数据类型
下表列出了C++支持的数据类型:
数据类型 | 大小 | 范围 |
---|---|---|
char | 1 字节 | -128 到 127 或 0 到 255 |
unsigned char | 1 字节 | 0 到 255 |
signed char | 1 字节 | -128 到 127 |
int | 4 字节 | -2147483648 到 2147483647 |
unsigned int | 4 字节 | 0 到 4294967295 |
signed int | 4 字节 | -2147483648 到 2147483647 |
short int | 2 字节 | -32768 到 32767 |
unsigned short int | 2 字节 | 0 到 65,535 |
signed short int | 2 字节 | -32768 到 32767 |
long int | 4 字节 | -2,147,483,648 到 2,147,483,647 |
signed long int | 4 字节 | -2,147,483,648 到 2,147,483,647 |
unsigned long int | 4 字节 | 0 到 4,294,967,295 |
float | 4 字节 | +/- 3.4e +/- 38 (~7 位) |
double | 8 字节 | +/- 1.7e +/- 308 (~15 位) |
long double | 8 字节 | +/- 1.7e +/- 308 (~15 位) |
Java支持的数据类型
Java支持以下数据类型:
数据类型 | 大小 | 范围 |
---|---|---|
byte | 1 字节 | -128 到 127 |
char | 1 字节 | -128 到 127 |
short | 1 字节 | -32,768 到 32,767 |
int | 2 字节 | -2,147,483,648 到 2,147,483,647 |
long | 8 字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
float | 2 字节 | -2147483648 到 2147483647 |
double | 8 字节 | +9.223*1018 |
Boolean | 1 位 | True 或 False |
Erlang支持的数据类型
在本节中,我们将讨论Erlang(一种函数式编程语言)支持的数据类型。
数字
Erlang支持两种类型的数字文字,即整数和浮点数。请看下面的例子,它展示了如何添加两个整数值:
-module(helloworld). -export([start/0]). start() -> io:fwrite("~w",[5+4]).
它将产生以下输出:
9
原子
原子是一个其值不能更改的字符串。它必须以小写字母开头,可以包含任何字母数字字符和特殊字符。当原子包含特殊字符时,应将其用单引号(')括起来。请看下面的例子以更好地理解。
-module(helloworld). -export([start/0]). start()-> io:fwrite(monday).
它将产生以下输出:
monday
注意 - 尝试将原子更改为以大写“M”开头的“Monday”。程序将产生错误。
Boolean
此数据类型用于将结果显示为true或false。请看下面的例子。它展示了如何比较两个整数。
-module(helloworld). -export([start/0]). start() -> io:fwrite(5 =< 9).
它将产生以下输出:
true
位串
位串用于存储未类型化内存区域。请看下面的例子。它展示了如何将位串的2位转换为列表。
-module(helloworld). -export([start/0]). start() -> Bin2 = <<15,25>>, P = binary_to_list(Bin2), io:fwrite("~w",[P]).
它将产生以下输出:
[15,25]
元组
元组是一个复合数据类型,具有固定数量的项。元组的每一项称为元素。元素的数量就是元组的大小。下面的例子展示了如何定义一个包含5个项的元组并打印其大小。
-module(helloworld). -export([start/0]). start() -> K = {abc,50,pqr,60,{xyz,75}} , io:fwrite("~w",[tuple_size(K)]).
它将产生以下输出:
5
映射
映射是一个复合数据类型,具有可变数量的键值关联。映射中的每个键值关联称为关联对。对的键和值部分称为元素。关联对的数量即为映射的大小。下面的例子展示了如何定义一个包含3个映射的映射并打印其大小。
-module(helloworld). -export([start/0]). start() -> Map1 = #{name => 'abc',age => 40, gender => 'M'}, io:fwrite("~w",[map_size(Map1)]).
它将产生以下输出:
3
列表
列表是一个复合数据类型,具有可变数量的项。列表中的每一项称为元素。元素的数量即为列表的长度。下面的例子展示了如何定义一个包含5个项的列表并打印其大小。
-module(helloworld). -export([start/0]). start() -> List1 = [10,15,20,25,30] , io:fwrite("~w",[length(List1)]).
它将产生以下输出:
5
注意 - Erlang中没有定义'字符串'数据类型。