函数式编程 - 数据类型


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

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

从广义上讲,有三种类型的数据类型 -

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

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

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

C++ 支持的数据类型

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

数据类型 尺寸 范围
字符 1字节 -128 至 127 或 0 至 255
无符号字符 1字节 0 至 255
签名字符 1字节 -128 至 127
整数 4字节 -2147483648 至 2147483647
无符号整数 4字节 0 至 4294967295
有符号整数 4字节 -2147483648 至 2147483647
短整型 2字节 -32768至32767
无符号短整型 2字节 0 至 65,535
有符号短整型 2字节 -32768至32767
长整型 4字节 -2,147,483,648 至 2,147,483,647
有符号长整型 4字节 -2,147,483,648 至 2,147,483,647
无符号长整型 4字节 0 至 4,294,967,295
漂浮 4字节 +/- 3.4e +/- 38(~7 位数字)
双倍的 8字节 +/- 1.7e +/- 308(~15 位)
长双 8字节 +/- 1.7e +/- 308(~15 位)

Java支持的数据类型

Java 支持以下数据类型 -

数据类型 尺寸 范围
字节 1字节 -128 至 127
字符 2字节 0 至 65,536
短的 2字节 -32,7688 至 32,767
整数 4字节 -2,147,483,648 至 2,147,483,647
长的 8字节 -9,223,372,036,854,775,808 至 9,223,372,036,854,775,807
漂浮 4字节 -2147483648 至 2147483647
双倍的 8字节 +9.223*1018
布尔值 1 位 对或错

Erlang 支持的数据类型

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

数字

Erlang 支持两种类型的数字文字,即整型浮点型。看一下下面的示例,它展示了如何添加两个整数值 -

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

它将产生以下输出 -

9

Atomics

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

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

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

它将产生以下输出 -

monday

注意- 尝试将Atomics更改为大写“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 

地图

映射是一种复合数据类型,具有可变数量的键值关联。映射中的每个键值关联称为关联对。该对的部分称为elements。关联对的数量被称为地图的大小。以下示例演示如何定义 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”数据类型。