使用空格而不是制表符进行缩进的客观原因是什么?

2023-12-26

根据 PSR-2 标准使用空格而不是制表符来缩进文件是否有客观原因,有人可以提供:

  • facts,
  • 参考,
  • 具体的专业知识

PSR-2 标准基于哪个?

PSR-2 标准的作者考虑的不仅仅是“外观和感觉”,不仅仅是基于意见的东西,而且很多人很难理解为什么空间在团队合作期间更好。

对接受答案的解释:

根据 Farsides 的回答:存储库的事情可能是 PSR-2 中空格被解释为缩进工具的一个确切例子。 PSR-2 是为协助团队合作而开发的标准。使用制表符时,行首的单个意外空格可能在 IDE 中不可见,并且可能会溜到存储库中。如果几个人处理同一个文件,很可能会产生不必要的冲突。使用空格而不是制表符可以轻松地在眼球上捕捉到这种意外的空格,这可能是使用它们成为标准的一个原因。


Facts:

1. GIT 和其他版本控制系统对空白的处理方式不同

根据我的经验,我们的项目面临:GIT 和其他版本控制系统对待隐形spaces + TABS不同的是,它会导致线路发生变化,而线路实际上并未受到影响。很容易不被注意到,当有不小心添加了一个space + TAB= 缩进在IDE中看起来是一样的,但是GIT在合并时会有所不同。它会损害您有效比较源代码管理中的修订版本的能力,这确实很可怕。当你拥有的时候它永远不会发生spaces only.

2. 消除协作者环境的差异(编辑器、操作系统、偏好等)

制表符宽度(以空格为单位)取决于您的环境(文本编辑器、操作系统、首选项等),但是各处的空间宽度都相同。 IDE 足够智能,可以根据您的个人喜好处理空白,但为协作生成的输出应该符合标准。 作为PSR-2 状态 https://www.php-fig.org/psr/psr-2/#24-indenting,仅使用空格,而不是将空格与制表符混合使用,有助于避免差异、补丁、历史记录和注释的问题。使用空格还可以轻松插入细粒度的子缩进以进行行间对齐。

3.使用空格的开发者比使用制表符的开发者赚更多钱

使用空格代替制表符与 8.6% 相关更高的薪水。使用空格代替制表符会导致薪资差异高达 2.4 年的工作经验。 (来源:Stack Overflow 2017 开发者调查 https://stackoverflow.blog/2017/06/15/developers-use-spaces-make-money-use-tabs/).

4. 关于编码风格重要性的大量研究

如果项目中的每个协作者都保持相同的编码标准 - 从长远来看,这将是件好事,协作会更加高效和专业,重构或开发时也会保持相同的缩进。与此相关的研究:

  1. 例如,本·施奈德曼证实了这一点程序员行为的探索性实验 http://link.springer.com/article/10.1007%2FBF00975629:

    当程序语句以合理的顺序排列,专家能够比新手更好地记住它们。当陈述被打乱时,专家的优势就会降低。

  2. 1984 年的一项旧研究索洛韦和埃利希引用于代码完成 https://rads.stackoverflow.com/amzn/click/com/0735619670,并支持研究编程风格的要素 https://rads.stackoverflow.com/amzn/click/com/0070342075:

    我们的实证结果验证了这些规则:程序应该以特定的风格编写不仅仅是美观的问题。相反,以传统方式编写程序有一个心理基础:程序员强烈期望其他程序员遵循这些话语规则。如果违反规则,那么程序员随着时间的推移建立起来的期望所提供的效用就是有效无效.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用空格而不是制表符进行缩进的客观原因是什么? 的相关文章

  • PHP中如何识别服务器IP地址

    PHP中如何识别服务器IP地址 对于服务器 ip 来说是这样的 SERVER SERVER ADDR 这是港口的 SERVER SERVER PORT
  • 如何在 HTML / Javascript 页面中插入 PHP 下拉列表

    好吧 这是我的第二篇文章 请接受我是一个完全的新手 愿意学习 花了很多时间在各个网站上寻找答案 而且我几乎已经到达了我需要到达的地方 至少在这一点上 我有一个网页 其中有许多 javascript 函数 这些函数一起使用 google 地图
  • 如何在没有引用的情况下复制对象?

    PHP5 OOP 有据可查对象通过引用传递 http php net manual en language oop5 references php默认情况下 如果这是默认的 在我看来 有一种非默认的方式可以在没有参考的情况下进行复制 如何
  • php 表单提交 - Q2

    我对这个虚拟问题感到抱歉 这是我的简单 PHP 表单 其中包含两个 SQL 表和 ADD 提交 按钮 我希望将人员从 Test1 转移到 Test2 很多事情都很好 只有提交按钮不起作用 因此 Test2 表没有反馈 Revised 现在提
  • 检查文件权限

    我怎样才能检查file permissions 无需通过运行操作系统特定命令passthru or exec Use 文件权限 http php net fileperms功能 clearstatcache echo substr spri
  • 如何使用 Google 帐户对我们网站中的用户进行身份验证

    如何在我们的网站中使用 Google 帐户对用户进行身份验证 我希望用户重定向到谷歌登录页面 然后将他重定向到我的网站 我想要这个 PHP 实现 你要OAuth http code google com apis accounts docs
  • 如何确定当前使用哪个网格选项

    我将 Bootstrap 3 用于使用 PHP 和 HTML 创建的网页 随着响应式网格和类的开启引导程序3您可以将多个类分配给一个 div 以根据当前屏幕尺寸定义不同的宽度 例如 div class col lg 3 col md 3 c
  • 尝试获取 Google accessToken

    看起来 无论我做什么 谷歌都在竭尽全力阻止我完成这个研究项目 我的项目让我使用 Google 电子表格作为数据库 并使用所述电子表格中的数据执行程序化的 Google 图片搜索 并向最终用户显示一些结果 设置说明 我开始按照此处的说明进行操
  • 删除 woocommerce 店面主页标题 php

    我正在使用 woocommerce 的店面主题 我需要用 php 删除主页标题 h1 我知道 css 解决方案 但我不想使用它 因为我想将 h1 添加到该页面的其他位置 并且在一个页面中包含 2 个 h1 对 seo 不利页 我也知道删除页
  • 选取散列第 N 个元素的最快方法

    我有一个大哈希表 带有字符串索引的数组 并正在寻找一个函数quickly从中选取第一个 理想情况下也是第 N 个 元素 array shift and reset 对于我的需求来说太慢了 UPDATE 我也不是在寻找基于引用的解决方案 该函
  • 如何解决 Laravel 8 UI 分页问题?

    我在尝试最近发布的 laravel 8 时遇到了问题 我试图找出变化是什么以及它是如何工作的 当我这样做时 我遇到了分页 laravel 8 UI 变得混乱的问题 不知何故它发生了 有人可以帮助我吗 或者经历过同样的事情 像这样我在 lar
  • CSS 无法从带有 php“includes”的相对路径工作

    文件夹结构 index php includes header html css style css 我的主项目文件夹中有 2 个子文件夹 一个是名为 includes 的文件夹 另一个名为 css 我有我的 index php主文件夹中的
  • Windows iis 7.0 上的 APC 不稳定

    我的 IIS 非常不稳定 因为它总是由于某种与 APC 相关的原因而重新启动 服务器的规格如下 Intel R Xeon CPU 3GHZ 3GHZ 2GB RAM 64bit APC 和服务器规格 3 1 7 dev PHP Versio
  • phpinfo 说 php.ini 路径是 C:\Windows 但那里没有 php.ini

    我们正在尝试从 PHP5 切换到 PHP7 现在我们已经安装了 Apache 并且 PHP 可以运行了 然而 我们在php ini文件没有任何作用 Via phpinfo 我们意识到原因是Configuration File php ini
  • PHP:在脚本完成之前获取输出

    我有一个名为 data php 的脚本 如下所示 do some stuff echo result do some other stuff eg database operations 我需要在另一个脚本中使用 data php 的输出
  • wordpress - 像 stackoverflow 中那样内嵌 ajax 注释

    我有一个 WordPress 博客 希望为人们提供与 stackoverflow 中添加评论相同的用户体验 有很多评论 ajax 插件 但我找不到一个可以使用的插件 它允许您在主页上内联 进入并添加评论 而无需先深入到单独的单个帖子页面 任
  • 更改API数据输出的布局

    我是 API 集成和 PHP 的新手 我最近将 VIN 解码器集成到我的应用程序中 在输入框中输入车辆的 VIN 选择提交 然后就会显示 API 数据库中有关该车辆的所有信息 数据存储为关联数组 其中包含类别及其相应元素 例如 对于 VIN
  • Doctrine DQL 从 join 返回平面数组

    我通过 DQL 中的常规 LEFT JOIN 选择 3 个实体 它们通过连接表关联 连接表还定义了实体以及带注释的关系 查询执行没有问题 但我的结果作为平面数组返回 我期望一个包含三个实体作为每个索引的数组元素的数组 SELECT e1 e
  • PDO语法错误

    我在一个项目中使用 PDO 但提交时出现语法错误 这是我的代码
  • 如何在 PHP 中从字符串类名实例化? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何创建返回方法名称的新实例 不幸的是我收到这个错误 错误 类名必须是有效的对象或字符串 这是我的代码 class Foo public f

随机推荐

  • 在 XCode 5 中使用 iOS 5 模拟器?

    XCode 5 似乎仅附带 iOS 6 和 7 模拟器 有没有办法将 iOS 5 模拟器与 XCode 5 一起使用 如果您在 OS X v10 8 下使用 Xcode 5 那么如果您转到 首选项 gt 下载 您应该会在 组件 下看到可用的
  • 如何锁定文件

    我有一个write应该将数据安全写入文件的方法 The current file I am writing to FileOutputStream file null Synchronized version private void wr
  • 如何使用 Rspec 测试 Sinatra 中的辅助块?

    我正在编写一个 sinatra 应用程序并使用 rspec 和rack test 对其进行测试 如 sinatrarb com 上所述 到目前为止 一切都很棒 直到我将一些相当程序化的代码从我的域对象移到 西纳特拉的帮手 从那时起 我一直试
  • 使用 Firebase OAuth 保护 RESTful API?

    我在 iOS 和 Web 应用程序中使用 Firebase 来处理用户身份验证 我需要确保用户已登录 然后才能向我的 API 发出任何请求 我如何使用 Firebase 完成这样的事情 我正在考虑使用 Kong https getkong
  • R 中的大型固定效应二项式回归

    我需要在一个相对较大的数据框架上运行逻辑回归 该数据框架包含 480 000 个条目和 3 个固定效应变量 固定效应 var A 有 3233 个级别 var B 有 2326 个级别 var C 有 811 个级别 所以总共我有 6370
  • RSS 项目描述中的图像

    我开始为我的新网站进行 RSS 开发 但我想知道是否有任何方法可以将图像放在项目的描述中 如下所示
  • 当视图已经加载时,如何使用出现的键盘打开视图?

    我有一个要求 在视图中有一个文本字段 当我想通过切换选项卡 基于选项卡的应用程序 打开视图时 第一次加载视图时会出现键盘 因为我调用了 loadview 方法 但是当我切换到 tab2 并再次切换到 tab1 时 不会调用加载视图 我希望每
  • 在银河系坐标中绘制热图

    EDIT 好吧 我想出了一个糟糕的方法来做到这一点 涉及scipy interpolate griddata 我有一些二维数组 130x360 形式的地图 数组中的每个值对应于该点的测量值 这些地图以赤经 ra 和赤纬 dec 形式提供 范
  • 如何获取字符串的第一个单词并将其转换为 int? jQuery

    我需要获取字符串中的第一个单词 并将其转换为整数 如何使用 jQuery 做到这一点 example 223 洛雷姆 伊普苏姆 多洛尔 I need 223 并且它必须转换为integer 任何帮助 将不胜感激 您可以根据任何字符 例如空格
  • iPad 上禁用嵌入式 Youtube 播放器中的全屏按钮

    在研究了 stackoverflow 上至少十个类似的问题后 我似乎偶然发现了一些新东西 最近 不确定具体什么时候停止工作 嵌入式 YouTube 视频上的全屏按钮在 iPad 上被禁用 如果我尝试单击它 则会弹出 您的浏览器不支持全屏 的
  • 使用 lerna 将自定义参数发送到 npm (yarn) 脚本

    我在尝试将参数传递给npm脚本与lerna 我有一个节点脚本 我想在工作区的每个包中运行它 lerna文档建议如下 scripts my script lerna exec node LERNA ROOT PATH scripts my s
  • Swift 一次删除多个对象 Parse 服务器

    我向服务器查询如下 let query PFQuery className posts query whereKey uuid equalTo Ncell uuidLbl text query findObjectsInBackground
  • 从远程 SQLite 数据库复制表?

    有没有办法将数据从一个远程 SQLite 数据库复制到另一个 我在两台服务器上完成了文件复制 但是 一些更改会记录在每个服务器本地的 SQLite 数据库中 为了使文件复制正常工作 我需要复制一个表的内容并将其输入到另一系统上的表中 我知道
  • 如何保护database.yml?

    在 Ruby on Rails 应用程序中 database yml 是一个存储数据库凭据的纯文本文件 当我部署 Rails 应用程序时 我的 Capistrano 中有一个部署后回调 在应用程序的 config 目录中创建到 databa
  • 如何在Ubuntu中生成核心转储文件[重复]

    这个问题在这里已经有答案了 我想知道如何在 Ubuntu 中生成核心转储文件 我使用的是 Ubuntu 8 04 1 和 gcc 编译器 4 2 3 我编写了一个简单的 C 程序来生成核心转储 我已经编译了该程序 如 gcc g badpo
  • 从 StructureMap 获取的 HttpContext 上的空用户

    好吧 我之前的问题 设置有太多变量 所以我将其精简为最基本的组件 给出使用 StructureMap3 的以下代码 IoC setup For
  • 回发或回调参数无效。为什么?

    所以我得到了例外 回发或回调参数无效 使用启用事件验证 在配置或 在 页 出于安全目的 这 功能验证参数 回发或回调事件发起 从服务器控制 最初渲染它们 如果数据 是有效且预期的 使用 ClientScriptManager Registe
  • libreoffice 大量文本颜色更改

    有没有办法更改 LibreOffice 或 Openoffice 中文本中所有出现的特定颜色 是 光标位于find box hit more options 在里面Search Replace对话 点击 Format select Font
  • 如何在Windows 7中设置Python路径[重复]

    这个问题在这里已经有答案了 我尝试在 Windows 7 中设置 python 的路径 但我不能这样做 我去 My Computer gt Properties gt Advanced gt Environment Variables 但我
  • 使用空格而不是制表符进行缩进的客观原因是什么?

    根据 PSR 2 标准使用空格而不是制表符来缩进文件是否有客观原因 有人可以提供 facts 参考 具体的专业知识 PSR 2 标准基于哪个 PSR 2 标准的作者考虑的不仅仅是 外观和感觉 不仅仅是基于意见的东西 而且很多人很难理解为什么