函数式编程 - 数据类型



数据类型定义了对象可以具有的值类型以及可以对其执行的操作。在使用数据类型之前,应先声明它。不同的编程语言支持不同的数据类型。例如:

  • 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

此数据类型用于将结果显示为truefalse。请看下面的例子。它展示了如何比较两个整数。

-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中没有定义'字符串'数据类型。

广告