标签: idioms

var functionName = function(){} vs function functionName(){}

我最近开始维护其他人的JavaScript代码.我正在修复错误,添加功能,并尝试整理代码并使其更加一致.

以前的开发人员使用两种声明函数的方法,如果背后有原因,我就无法解决.

这两种方式是:

var functionOne = function() {
    // Some code
};
Run Code Online (Sandbox Code Playgroud)
function functionTwo() {
    // Some code
}
Run Code Online (Sandbox Code Playgroud)

使用这两种不同方法的原因是什么?每种方法的优缺点是什么?有一种方法可以通过一种方法完成,而另一种方法无法完成吗?

javascript syntax idioms function

6645
推荐指数
32
解决办法
98万
查看次数

如果__name__ =="__ main__":怎么办?

怎么if __name__ == "__main__":办?

# Threading example
import time, thread

def myfunction(string, sleeptime, lock, *args):
    while True:
        lock.acquire()
        time.sleep(sleeptime)
        lock.release()
        time.sleep(sleeptime)

if __name__ == "__main__":
    lock = thread.allocate_lock()
    thread.start_new_thread(myfunction, ("Thread #: 1", 2, lock))
    thread.start_new_thread(myfunction, ("Thread #: 2", 2, lock))
Run Code Online (Sandbox Code Playgroud)

python program-entry-point idioms namespaces python-module

5545
推荐指数
36
解决办法
261万
查看次数

如何正确实现C++中的工厂方法模式

C++中的这一件事让我感到不舒服很长一段时间,因为我老实说不知道该怎么做,尽管听起来很简单:

如何正确地在C++中实现Factory方法?

目标:允许客户端使用工厂方法而不是对象的构造函数来实例化某个对象,而不会产生不可接受的后果和性能损失.

"工厂方法模式"是指对象内部的静态工厂方法或另一个类中定义的方法,或全局函数.通常只是"将类X的实例化的正常方式重定向到构造函数之外的任何其他位置的概念".

让我略过一些我想到过的可能答案.


0)不要制造工厂,制造建造者.

这听起来不错(实际上通常是最好的解决方案),但不是一般的补救措施.首先,有些情况下,对象构造是一个复杂的任务,足以证明它被提取到另一个类.但即使将这个事实放在一边,即使对于仅使用构造函数的简单对象,通常也不会这样做.

我所知道的最简单的例子是2-D Vector类.这么简单,但很棘手.我希望能够从笛卡尔坐标和极坐标两者构造它.显然,我做不到:

struct Vec2 {
    Vec2(float x, float y);
    Vec2(float angle, float magnitude); // not a valid overload!
    // ...
};
Run Code Online (Sandbox Code Playgroud)

我的自然思维方式是:

struct Vec2 {
    static Vec2 fromLinear(float x, float y);
    static Vec2 fromPolar(float angle, float magnitude);
    // ...
};
Run Code Online (Sandbox Code Playgroud)

其中,而不是构造函数,导致我使用静态工厂方法...这实际上意味着我正在以某种方式实现工厂模式("类成为自己的工厂").这看起来不错(并且适合这种特殊情况),但在某些情况下失败,我将在第2点中描述.继续阅读.

另一种情况:试图通过某些API的两个opaque typedef(例如不相关域的GUID,或GUID和位域)重载,类型在语义上完全不同(所以 - 理论上 - 有效的重载)但实际上它们实际上是同样的事情 - 像无符号的int或void指针.


1)Java方式

Java很简单,因为我们只有动态分配的对象.制造工厂同样简单:

class FooFactory {
    public Foo createFooInSomeWay() {
        // can be a static method as well,
        //  if we don't need the factory …
Run Code Online (Sandbox Code Playgroud)

c++ design-patterns idioms factory-method

309
推荐指数
7
解决办法
16万
查看次数

如何循环C++地图的地图?

如何std::map在C++中循环?我的地图定义为:

std::map< std::string, std::map<std::string, std::string> >
Run Code Online (Sandbox Code Playgroud)

例如,上面的容器包含如下数据:

m["name1"]["value1"] = "data1";
m["name1"]["value2"] = "data2";
m["name2"]["value1"] = "data1";
m["name2"]["value2"] = "data2";
m["name3"]["value1"] = "data1";
m["name3"]["value2"] = "data2";
Run Code Online (Sandbox Code Playgroud)

如何遍历此地图并访问各种值?

c++ iteration dictionary loops idioms

287
推荐指数
6
解决办法
43万
查看次数

获取与字典中的最小值对应的键

如果我有一个Python字典,我如何获得包含最小值的条目的键?

我在考虑与这个min()功能有关...

鉴于输入:

{320:1, 321:0, 322:3}
Run Code Online (Sandbox Code Playgroud)

它会回来321.

python dictionary idioms min minimum

264
推荐指数
7
解决办法
19万
查看次数

Python习惯用法返回第一项或无

我确信有一种更简单的方法可以解决这个问题.

我正在调用一堆返回列表的方法.该列表可能为空.如果列表非空,我想返回第一个项目; 否则,我想要返回无.此代码有效:

my_list = get_list()
if len(my_list) > 0: return my_list[0]
return None
Run Code Online (Sandbox Code Playgroud)

在我看来,应该有一个简单的单行成语,但对于我的生活,我无法想到它.在那儿?

编辑:

我在这里寻找单行表达式的原因并不是因为我喜欢简洁的代码,而是因为我必须编写很多像这样的代码:

x = get_first_list()
if x:
    # do something with x[0]
    # inevitably forget the [0] part, and have a bug to fix
y = get_second_list()
if y:
    # do something with y[0]
    # inevitably forget the [0] part AGAIN, and have another bug to fix
Run Code Online (Sandbox Code Playgroud)

我想要做的事情当然可以用一个函数来完成(也可能是):

def first_item(list_or_none):
    if list_or_none: return list_or_none[0]

x = first_item(get_first_list())
if x:
    # do something with x
y …
Run Code Online (Sandbox Code Playgroud)

python idioms python-2.4

241
推荐指数
8
解决办法
27万
查看次数

如何在Java中反转int数组?

我试图在Java中反转一个int数组.

此方法不会反转数组.

for(int i = 0; i < validData.length; i++)
{
    int temp = validData[i];
    validData[i] = validData[validData.length - i - 1];
    validData[validData.length - i - 1] = temp;
}
Run Code Online (Sandbox Code Playgroud)

这有什么问题?

java arrays idioms idiomatic

224
推荐指数
14
解决办法
51万
查看次数

什么是pythonic方法来检测python'for'循环中的最后一个元素?

我想知道对for循环中的最后一个元素进行特殊处理的最佳方法(更紧凑和"pythonic"方式).有一段代码只能元素之间调用,在最后一个元素中被抑制.

以下是我目前的工作方式:

for i, data in enumerate(data_list):
    code_that_is_done_for_every_element
    if i != len(data_list) - 1:
        code_that_is_done_between_elements
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法?

注意:我不想使用hacks,例如使用reduce;)

python for-loop idioms fencepost

166
推荐指数
10
解决办法
15万
查看次数

什么是"执行"成语?

我听说过这个"执行周围"的习语(或类似的)是什么?为什么我可以使用它,为什么我不想使用它?

java language-agnostic design-patterns idioms

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

Python:最常用的方法是将None转换为空字符串?

做以下事情的最惯用方法是什么?

def xstr(s):
    if s is None:
        return ''
    else:
        return s

s = xstr(a) + xstr(b)
Run Code Online (Sandbox Code Playgroud)

更新:我正在使用Tryptich的建议来使用str(s),这使得这个例程适用于除字符串之外的其他类型.Vinay Sajip的lambda建议给我留下了深刻的印象,但我想保持我的代码相对简单.

def xstr(s):
    if s is None:
        return ''
    else:
        return str(s)
Run Code Online (Sandbox Code Playgroud)

python string idioms

139
推荐指数
10
解决办法
16万
查看次数