百科问答小站 logo
百科问答小站 font logo



为什么后端喜欢把「男女」等枚举类型的数据转成 01? 第1页

  

user avatar   haozhi-yang-41 网友的相关建议: 
      

其实数值类型(整形)做逻辑/状态标记是业界通行的做法,无论前后端都应该遵循的。

优势在:

  1. 数据状态稳定。也就是说,你今天male代表男,那如果传来了个MALE呢?或者mALe呢?(更极端点,如果你还想用中文的话,你还要折腾各种utf8/gb2312/gbk/gb18030之类的东西——如果你觉得这些不复杂,那我可以保证一定是因为你见识太少)。如果你说你会在传输/存储时加一句tolower(),或者有一个类似功能的封装——那你封装一个返回0/1的togender()不也是一样?总而言之,作为数据,你要进行各种判断或者处理的前提必须是:稳定唯一(定态)的,而数值类型天然就是定态的,所以是不言自明的。
  2. 说完定态就要说另一个相关的概念:定长。对于计算机系统来说,定长的数据,无论在传输、拆组包、存储、计算过程中,无论在时间复杂度、空间复杂度、逻辑复杂度上看,都是有极大优势的。这甚至会影响各种系统的设计——例如说计算各服务器的负载能力,以及判断现有系统是否需要扩容等。
  3. 整形的数值有聚集性。也就是说,大家都从0(有时0当作未定义,则会从1)开始递增,所以不同状态之间的数值是很接近的,这会为很多逻辑判断带来简便。例如说:合法性校验——如果0/1代表男女的话,你收到一个大于等于2的值,那你就知道一定出问题了。即使你把性别扩展到56种,那也是简单的拿56判断一下而已。但如果你用非整形,那你需要顺序把56种数据全都扫一遍才知道是否合法。
  4. “计算机中任何问题,都可以用多加一层抽象来解决”——而数值类型代表id,本质上也是一种抽象。也许它在你当前的系统中不一定是为了解决些什么当前的问题,但是作为一种预留措施,它可以看作是一种保护性设计。

总而言之

我感觉后台是在随意转呢!他们没有任何理由,拿到就胡乱转吗?

你要说0代表男1代表女,还是0代表女1代表男,这确实一般是随便定的,甚至有些时候临时想到了随手加一个都有可能(例如说性别里,加一个2代表“保密”)。

但转成整形这件事,是有道理的。甚至如果你的团队流程规范点的话,你设计一个接口,里面的用了字符型而不是整形,往往会被重点关照,看你是不是有非常特别的迫不得已的理由这么干——但绝大多数情况下,都没有什么理由非常特别的迫不得已到需要这么干。


user avatar   rocwon 网友的相关建议: 
      

京东物流有个接口,包裹状态就是中文;电信物联网平台有个接口,卡状态也是中文。

对接的时候,真想问候这些程序员的女朋友。


user avatar   Ivony 网友的相关建议: 
      

虽然说这就是个习惯问题。

但是前端分不清value和presentation还是令人遗憾……


要后端真给你男女,你做localization的时候就爽死了……



其实要我说,我也会认为magic number缺少可读性,但是标识符用M/F就完了,真用男女那真是好玩了……


去表现化反而应该是前端提出来才对……




  

相关话题

  为什么前端不能一直做?难道要转行?? 
  《阮一峰版快速排序完全是错的》一文是否存在事实错误? 
  JavaScript 是什么? 
  web前端是不是没有前景了? 
  应对流量劫持,前端能做哪些工作? 
  独立开发先写前端还是先写后端? 
  为什么form表单提交没有跨域问题,但ajax提交有跨域问题? 
  现在大多数中国Web前端开发工程师是否会考虑无障碍性(Accessibility)? 
  Node.js是用来做什么的? 
  前端开发的难点到底在什么地方? 

前一个讨论
c++中超出char、int范围的整数怎么存储?
下一个讨论
计算机专业上课时间能不能压缩到1年半以内?





© 2024-05-18 - tinynew.org. All Rights Reserved.
© 2024-05-18 - tinynew.org. 保留所有权利