我个人喜欢for在Ruby中使用关键字进行迭代,因为它从我的眼睛看起来很干净.我通常认为for可能是别名Enumerable#each,但我不知道是否正确.在最基本的例子中:
for i in (1..10)
puts i
end
Run Code Online (Sandbox Code Playgroud)
行为与...相同
(1..10).each do |i|
puts i
end
Run Code Online (Sandbox Code Playgroud)
只是没有创建一个新的变量范围.此外,ruby-doc说
该
for循环在现代Ruby程序很少使用.
这让我觉得有一个特定的,技术上的原因反对使用.没有新的变量范围是否重要?以什么方式?
是否有充分理由使用retval变量而不仅仅返回计算?
def add(self, x, y):
return x + y
Run Code Online (Sandbox Code Playgroud)
与
def add(self, x, y):
retval = x + y
return retval
Run Code Online (Sandbox Code Playgroud)
我觉得我通常会在代码示例中看到retval(或其他一些命名变量),但对我来说这似乎是一种(小)浪费.
在更好的编码实践方面,这是一个更好的决策?
break在foreach中使用a 跳出循环例如,使用foreach:
foreach(string bean in stringArray)
{
if(bean == "green")
{
break;
}
}
Run Code Online (Sandbox Code Playgroud)
以及for循环的示例:
bool found = false;
for (int i = 0; i < stringArray.Length && !found; i++)
{
if (stringArray[i] == "green")
{
found = true;
}
}
Run Code Online (Sandbox Code Playgroud) 据我了解,在嵌入式系统程序中包含不同硬件的不同选项的最佳方法之一是#ifdef语句.在风格上,这应该走多远?我想具体一点,如果有人使用#ifdef功能减速,你会摇头吗?
对我来说这感觉很傻,但是一个硬件选项需要不同类型的函数参数而不是另一个选项.有没有更简洁的方法来实现这种效果,还是更好地使用次优代码来实现某些硬件选项?
如果要阅读太多文本而您更喜欢代码:
#ifdef internaldac
int dacWrite(int level) {
#else
int dacWrite(byte highbyte, byte lowbyte) {
#endif
Run Code Online (Sandbox Code Playgroud)
我认为这是写这个的最有效方式,但我应该采用另一种方式(风格)吗?
我想知道在使用内联函数时是否存在某种命名约定.
假设我正在实现一个API,并希望让用户决定是否要使用普通函数或内联函数(两者都做同样的事情),是否有一个命名约定如何让外部世界看到一个函数是潜在的内联?我知道我可以查看.h或.inl文件
编辑: 我觉得有必要澄清一些观点,因为看起来我一开始并不够清楚.
假设我有一个接受三个值的函数.就像是:
bool MyClass::AddTwoNumbersAndCheckIfBigger(int summandOne, int summandTwo, int biggerNr)
{
bool isBigger = false;
int sum = summandOne+summandTwo;
if(sum > biggerNr)
{
isBigger = true;
}
return isBigger;
}
Run Code Online (Sandbox Code Playgroud)
这个函数可以调用一次,最多x> 1000000.如果我调用它一次,我希望它只是被正常调用,但如果在for循环中调用1000000次,我可能更喜欢内联选项.
我想让开发人员可以在这两个选项之间进行选择.我知道编译器负责决定它是否会被用作内联函数,但我想如果开发人员可以自己决定它会很好.
命名约定的问题源于这样一个事实:我有用户\开发人员不查看头文件但只使用intellisense作为指导.
我有改变List类型的参数的函数(改变内部对象状态).例如:
public void ChangeList<T>(List<T> source, T value)
{
//Actions
source.Add(value);
//Actions
}
Run Code Online (Sandbox Code Playgroud)
什么是功能签名更好?为什么?
第一: public void ChangeList<T>(List<T> source, T value)
要么
第二: public void ChangeList<T>(ref List<T> source, T value)
编辑:问题可以改变.如何明确指定函数更改列表的状态?(函数名称或ReadonlyCollection除外)
最近我已经改变了我的公司和我的新公司,遵循编码标准是必须的.在我的技术主管审核期间,我收到了评论评论"我们不应该在私人方法中调用私有方法".
这是一个随处可见的通用做法吗?如果我的私有方法代码大小正在增加(例如,超过50或60行),那么在这种情况下我们如何减少方法大小和复杂性呢.
在不同方法中定义不同的功能也使事情更容易理解,但如果遵循上面提到的私有方法标准,那么在这种情况下处理方法复杂性的可能方法是什么.
我总是想知道一个项目/团队/公司如何选择或有资格选择像MISRA 1998/2004/2012这样的特定指南?如何确定和确定哪个指南足以满足项目要求(成本与时间对质量)?
(我知道他的问题有点生硬,但任何答案都会受到赞赏)
我想写这样的东西:
DOMElement
.innerHTML
.toLowerCase()
.split(' ')
.forEach(function(word) {
return word.charAt(0).toUpperCase() + word.slice(1);
})
.join(' ')
Run Code Online (Sandbox Code Playgroud)
既然join需要接收array,是否有一种优雅的方式来提供它?
例如
在A类:
b.doThing();
Run Code Online (Sandbox Code Playgroud)
在B级:
doThing() {
c.doThing();
}
Run Code Online (Sandbox Code Playgroud)
要么
在A班:
b.getClassC().doThing();
Run Code Online (Sandbox Code Playgroud)
这种情况的惯例是什么?