标签: coding-style

将数字限制为细分市场的最优雅方式是什么?

比方说x,ab是数字.我需要x限制段的范围[a, b].

我可以写Math.max(a, Math.min(x, b)),但我不认为这很容易阅读.有没有人有一种聪明的方式以更易读的方式写这个?

javascript coding-style

109
推荐指数
8
解决办法
9万
查看次数

命名"class"和"id"HTML属性 - 破折号与下划线

<div id="example-value">还是<div id="example_value">

这个网站和Twitter使用的是第一种风格.Facebook和Vimeo--第二个.

你使用哪一个?为什么?

html coding-style naming-conventions

108
推荐指数
4
解决办法
7万
查看次数

在R中命名变量的首选样式是什么?

在R代码中,您喜欢命名变量和函数的约定?

据我所知,有几种不同的惯例,所有这些惯例都在喧嚣的和谐中共存:

1.期间分隔符的使用,例如

  stock.prices <- c(12.01, 10.12)
  col.names    <- c('symbol','price')
Run Code Online (Sandbox Code Playgroud)

优点: 在R社区中具有历史优先权,在整个R核心中普遍存在,并且由Google的R风格指南推荐.

缺点: 充满了面向对象的内涵,让R新手感到困惑

2.使用下划线

  stock_prices <- c(12.01, 10.12)
  col_names    <- c('symbol','price')
Run Code Online (Sandbox Code Playgroud)

优点: 许多编程语言中的常见惯例; 受到Hadley Wickham风格指南的青睐,并在ggplot2和plyr包中使用.

缺点: R程序员历史上没有使用过; 令人烦恼地映射到Emacs-Speaks-Statistics中的'< - '运算符(可以用'ess-toggle-underscore'改编).

3.混合资本化的使用(camelCase)

  stockPrices <- c(12.01, 10.12)
  colNames    <- c('symbol','price')
Run Code Online (Sandbox Code Playgroud)

优点:似乎在多个语言社区得到广泛采用.

缺点:有最近的先例,但没有历史使用(在R基础或其文档中).

最后,好像它没有足够的混淆,我应该指出谷歌风格指南争论变量的点符号,但函数的混合大写.

R包中缺乏一致的样式在几个层面上存在问题.从开发人员的角度来看,它使维护和扩展其他代码变得困难(尤其是其风格与您自己的风格不一致).从R用户的角度来看,不一致的语法通过将概念表达的方式相乘来加深R的学习曲线(例如,日期转换函数asDate(),as.date()或as_date()?不,它就是.日期()).

coding-style r naming-conventions

107
推荐指数
4
解决办法
2万
查看次数

方便地在enum和int/String之间映射

当使用只能获取有限数量值的变量/参数时,我会尝试始终使用Java enum,如

public enum BonusType {
  MONTHLY, YEARLY, ONE_OFF
}
Run Code Online (Sandbox Code Playgroud)

只要我留在我的代码中,就可以了.但是,我经常需要与其他使用普通int(或String)值的代码进行交互以达到相同的目的,或者我需要从/向数据库读取/写入数据,其中数据存储为数字或字符串.

在这种情况下,我想有一个方便的方法将每个枚举值与一个整数相关联,这样我就可以双向转换(换句话说,我需要一个"可逆的枚举").

从枚举到int很容易:

public enum BonusType {
  public final int id;

  BonusType(int id) {
    this.id = id;
  }
  MONTHLY(1), YEARLY(2), ONE_OFF(3);
}
Run Code Online (Sandbox Code Playgroud)

然后我可以访问int值BonusType x = MONTHLY; int id = x.id;.

但是,我没有看到反向的好方法,即从int到enum.理想情况下,像

BonusType bt = BonusType.getById(2); 
Run Code Online (Sandbox Code Playgroud)

我能想出的唯一解决方案是:

  • 将查找方法放入枚举中,BonusType.values()用于填充映射"int - > enum",然后缓存并将其用于查找.会工作,但我必须将这个方法完全复制到我使用的每个枚举中:-(.
  • 将查找方法放入静态实用程序类中.然后我只需要一个"查找"方法,但我必须摆弄反射才能让它适用于任意枚举.

对于这样一个简单的(?)问题,这两种方法看起来都非常尴尬.

还有其他想法/见解吗?

java enums coding-style

107
推荐指数
5
解决办法
12万
查看次数

在Python中,何时应该使用函数而不是方法?

Python的Zen声明应该只有一种方法可以做 - 但我经常遇到决定何时使用函数与何时使用方法的问题.

让我们来看一个简单的例子 - 一个ChessBoard对象.假设我们需要一些方法来获得董事会所有合法的King移动.我们写ChessBoard.get_king_moves()或get_king_moves(chess_board)吗?

以下是我看到的一些相关问题:

我得到的答案基本上没有结果:

为什么Python使用某些功能的方法(例如list.index())但是其他功能(例如len(list))?

主要原因是历史.函数用于那些对一组类型通用的操作,这些操作甚至可以用于根本没有方法的对象(例如元组).当您使用Python的功能特性(map(),apply()等)时,拥有一个可以很容易地应用于无定形对象集合的函数也很方便.

事实上,实现len(),max(),min()作为内置函数实际上比将它们作为每种类型的方法实现它们的代码更少.人们可以对个别案例嗤之以鼻,但它是Python的一部分,现在进行这样的根本性改变为时已晚.必须保留这些功能以避免大量代码破坏.

虽然有趣,但上述内容并未真正说明采用何种策略.

这是原因之一 - 使用自定义方法,开发人员可以自由选择不同的方法名称,如getLength(),length(),getlength()或任何方法.Python强制执行严格命名,以便可以使用公共函数len().

稍微有点儿了.我的看法是函数在某种意义上是Pythonic版本的接口.

最后,来自Guido本人:

谈论能力/接口让我想到了一些我们的"流氓"特殊方法名称.在语言参考中,它说:"类可以通过定义具有特殊名称的方法来实现特殊语法(例如算术运算或下标和切片)调用的某些操作." 但是所有这些方法都有特殊的名称,__len__或者__unicode__似乎是为了内置函数的优势而提供的,而不是为了支持语法.据推测,在基于接口的Python中,这些方法将变成ABC上的常规命名方法,这样就 __len__可以了

class container:
  ...
  def len(self):
    raise NotImplemented
Run Code Online (Sandbox Code Playgroud)

虽然,再考虑一下,我不明白为什么所有语法操作都不会在特定的ABC上调用适当的常用命名方法." <"举例来说,大概会调用" object.lessthan"(或者是" comparable.lessthan").所以另一个好处是能够让Python远离这个错位名称奇怪,这在我看来是HCI的改进.

嗯.我不确定我同意(数字:-).

有两点"Python基本原理"我想首先解释一下.

首先,由于HCI的原因,我选择len(x)而不是x.len()(def __len__()后来发布).实际上有两个相互交织的原因,都是人机交互:

(a)对于某些操作,前缀表示法只比读后缀更好 - 前缀(和中缀!)操作在数学中有悠久的传统,它喜欢视觉效果帮助数学家思考问题的符号.比较与我们改写像公式简单x*(a+b)x*a + x*b使用原始OO符号做同样的事情的笨拙.

(b)当我阅读代码时,len(x)知道它是在询问某些东西的长度.这告诉我两件事:结果是一个整数,参数是某种容器.相反,当我阅读时x.len(),我必须知道这x是某种实现接口的容器或从具有标准的类继承len().当没有实现映射的类有一个get()或一个keys() 方法,或者一个不是文件的东西有一个方法时,见证我们偶尔会遇到的困惑write().

用另一种方式说同样的事情,我认为'len'是一种内置 操作 …

python methods coding-style function

107
推荐指数
5
解决办法
5万
查看次数

如何在Webstorm中对抗大量未解决的变量警告

好的,我有一个从ajax获取数据的函数:

function getData(data){
    console.log(data.someVar);
}
Run Code Online (Sandbox Code Playgroud)

Webstorm说someVar- 是未解决的变量.我不知道如何处理这么多警告.

我看到几个选项:

  • 压制警告;
  • 添加带有字段的json源文件(更多详细信息);
  • 使用类似数组的语法:( data['some_unres_var']/** @namespace data.some_unres_var*/警告我不要这样做);
  • ???

Webstorm也让我为"数据"创建命名空间(添加注释someVar),创建这样的字段或重命名它.

javascript coding-style webstorm

105
推荐指数
5
解决办法
6万
查看次数

将Python代码转换为符合PEP8的工具

我知道有一些工具可以验证你的Python代码是否符合PEP8,例如,有一个在线服务一个python模块.

但是,我找不到可以我的Python文件转换为自包含的PEP8有效Python文件的服务或模块.有谁知道有没有?
我认为这是可行的,因为PEP8完全是关于代码的外观,对吗?

python coding-style pep8

104
推荐指数
5
解决办法
6万
查看次数

应该以现在还是过去时态写入提交消息?

那么你认为哪个更好,更直观?

Fixed the XXX bug in YYY
Fix the XXX bug in YYY
Fixes the XXX bug in YYY
Fixing the XXX bug in YYY
Run Code Online (Sandbox Code Playgroud)

请提供您的理由.注意我从您的一般观点来看,这意味着您不应该尝试将其与您首选的svn/cvs工具或编程语言相关联,而应将其视为应该/可以应用于任何工具和编程语言的东西.

version-control coding-style

102
推荐指数
7
解决办法
8300
查看次数

在C++中,从函数返回向量仍然是不好的做法吗?

简短版本:在许多编程语言中返回大型对象(例如向量/数组)是很常见的.如果类有移动构造函数,这个样式现在在C++ 0x中是否可以接受,或者C++程序员认为它是奇怪/丑陋/可憎的?

长版本:在C++ 0x中,这仍然被认为是不好的形式?

std::vector<std::string> BuildLargeVector();
...
std::vector<std::string> v = BuildLargeVector();
Run Code Online (Sandbox Code Playgroud)

传统版本如下所示:

void BuildLargeVector(std::vector<std::string>& result);
...
std::vector<std::string> v;
BuildLargeVector(v);
Run Code Online (Sandbox Code Playgroud)

在较新的版本,则返回值从BuildLargeVector是一个rvalue,所以v将使用的移动构造函数来构造std::vector,假设(N)RVO不会发生.

甚至之前的C++ 0x第一形式常常是因为(N)RVO"有效"的.但是,(N)RVO由编译器决定.现在我们有rvalue引用,保证不会发生深度复制.

编辑:问题实际上与优化无关.所示的两种形式在现实世界的节目中具有几乎相同的性能.然而,在过去,第一种形式可能具有数量级更差的性能.因此,第一种形式是C++编程中的主要代码味道很长一段时间.不再了,我希望?

c++ coding-style return-value-optimization c++11

102
推荐指数
5
解决办法
4万
查看次数

为什么在C#中经常会看到"null!= variable"而不是"variable!= null"?

在c#中,您说明条件的顺序的执行速度是否有任何差异?

if (null != variable) ...
if (variable != null) ...
Run Code Online (Sandbox Code Playgroud)

从最近开始,我经常看到第一个,因为我习惯了第二个,所以引起了我的注意.

如果没有差异,第一个的优势是什么?

c# coding-style

100
推荐指数
5
解决办法
3万
查看次数