函数式编程 - 数据类型

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

  • C 支持 char、int、float、long 等
  • Python 支持字符串、列表、元组等

从广义上讲,数据类型分为三种 −

  • 基本数据类型 − 这些是预定义的数据类型,程序员可以根据需要直接使用这些数据类型仅存储一个值,即整数类型、字符类型或浮点类型。 例如 int、char、float 等

  • 派生数据类型 − 这些数据类型是使用内置数据类型派生的,这些数据类型是由程序员设计的,用于根据其要求存储相同类型的多个值。 例如数组、指针、函数、列表等

  • 用户定义的数据类型 − 这些数据类型是使用内置数据类型派生的,这些数据类型被包装到单个数据类型中,以根据要求存储相同类型或不同类型或两者的多个值。 例如类、结构等

C++ 支持的数据类型

下表列出了C++支持的数据类型 −

数据类型 大小 范围
char 1 byte -128 to 127 or 0 to 255
unsigned char 1 byte 0 to 255
signed char 1 byte -128 to 127
int 4 bytes -2147483648 to 2147483647
unsigned int 4 bytes 0 to 4294967295
signed int 4 bytes -2147483648 to 2147483647
short int 2 bytes -32768 to 32767
unsigned short int 2 bytes 0 to 65,535
signed short int 2 bytes -32768 to 32767
long int 4 bytes -2,147,483,648 to 2,147,483,647
signed long int 4 bytes -2,147,483,648 to 2,147,483,647
unsigned long int 4 bytes 0 to 4,294,967,295
float 4 bytes +/- 3.4e +/- 38 (~7 digits)
double 8 bytes +/- 1.7e +/- 308 (~15 digits)
long double 8 bytes +/- 1.7e +/- 308 (~15 digits)

Java支持的数据类型

Java支持以下数据类型 −

数据类型 大小 范围
byte 1 byte -128 to 127
char 2 byte 0 to 65,536
short 2 byte -32,7688 to 32,767
int 4 byte -2,147,483,648 to 2,147,483,647
long 8 byte -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
float 4 byte -2147483648 to 2147483647
double 8 byte +9.223*1018
Boolean 1 bit True or False

Erlang 支持的数据类型

在本节中,我们将讨论 Erlang(一种函数式编程语言)支持的数据类型。

数字

Erlang 支持两种类型的数字文字,即 integerfloat。 看一下下面的示例,该示例展示了如何将两个整数值相加 −

-module(helloworld).
-export([start/0]). 
start() -> 
   io:fwrite("~w",[5+4]). 

它将产生以下输出 −

9

原子

atom 是一个其值不能更改的字符串。 它必须以小写字母开头,并且可以包含任何字母数字字符和特殊字符。 当原子包含特殊字符时,应将其括在单引号 (') 内。 请看以下示例以更好地理解。

-module(helloworld). 
-export([start/0]). 

start()-> 
   io:fwrite(monday). 

它将产生以下输出 −

monday

注意 − 尝试将原子更改为大写"M"的"Monday"。 程序将产生错误。

布尔值

此数据类型用于将结果显示为 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 中未定义"String"数据类型。