标签: code-design

用布尔值做保险丝

我有很多代码片段必须在初始化期间运行一次.

我必须以这种方式使用布尔标志,因为它在一个事件中

bool _fuse;

void PerformLayout()
{
    Size size;

    if (!_fuse)
    {
        size = _InitialContainerSize;
        _fuse = true;
    }
    else
        size = parent.Size;

    // ...
}
Run Code Online (Sandbox Code Playgroud)

因为它经常发生,我做了一些事情来使这个布尔变量看起来像一个保险丝:

所以我这样做了:

bool _fuse;

void PerformLayout()
{
    Size size;

    if (!Burnt(ref _fuse))
        size = _InitialContainerSize;
    else
        size = parent.Size;

    // ...
}
Run Code Online (Sandbox Code Playgroud)

如果它初始化为false,则查询结果返回false一次,将切换为true,并且后续调用返回true.

public static bool Burnt(ref bool value)
{
    if (!value)
    {
        value = true;
        return false;
    }
    else
        return true;
}
Run Code Online (Sandbox Code Playgroud)

当然,它有效,但我只是中等满意,我相信有更优雅的解决方案.你的是什么?

c# boolean code-design

5
推荐指数
0
解决办法
137
查看次数

什么时候应该限制派生类中虚拟函数的可访问性?

请考虑以下代码:

class Base
{
public:
    virtual void Foo() {}
};

class Derived : public Base
{
private:
    void Foo() {}
};

void func()
{
    Base* a = new Derived;
    a->Foo(); //fine, calls Derived::Foo()

    Derived* b = new Derived;
//  b->Foo(); //error
    static_cast<Base*>(b)->Foo(); //fine, calls Derived::Foo()
}
Run Code Online (Sandbox Code Playgroud)

关于此事,我听过两种不同的思想流派:

1)保持可访问性与基类相同,因为用户无论如何都可以使用static_cast来获取访问权限.

2)使功能尽可能私密.如果用户需要a-> Foo()而不是b-> Foo(),那么Derived :: Foo应该是私有的.如果需要,它总是可以公开.

是否有理由偏好其中一个?

c++ virtual-functions access-specifier code-design

5
推荐指数
1
解决办法
284
查看次数

std :: vector是否适合频繁调整大小?

我正在创造一个我有小"粒子"的游戏.它们的数量经常变化(每隔几秒钟),我想知道存储它们的最佳方法是什么.是std::vectorstd::deque为了这个美好的?

是否可以保留永远不会被使用的空间(在那个容器中)(我有上限)?

c++ stl resize vector code-design

4
推荐指数
1
解决办法
305
查看次数

如何创建外部不可修改的变量?

我正在开发简单的模拟库并遇到问题,我有模拟Time变量,在任何情况下都不能由API用户(程序员)修改(只提供有关模拟时间的信息),但应该可以通过模拟库进行修改,所以它不能是恒定的.

这是我想出来的,但对我来说似乎有点棘手

double simTime;                // Internal time, modified by library
const double& Time = simTime;  // Time info provided for programmer in API
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?

c++ code-design

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

我不喜欢采用两个或更多迭代的Python函数.这是个好主意吗?

这个问题来自于这个问题:

def fringe8((px, py), (x1, y1, x2, y2)):
Run Code Online (Sandbox Code Playgroud)

就个人而言,看到一个带有固定数量的迭代(如元组)或两个或更多字典(如Shotgun API中)的两个参数的函数是我的烦恼之一.它很难使用,因为所有的冗长和双括号外壳.

这不会更好:

>>> class Point(object):
...     def __init__(self, x, y):
...         self.x = x
...         self.y = y
...     
>>> class Rect(object):
...     def __init__(self, x1, y1, x2, y2):
...         self.x1 = x1
...         self.y1 = y1
...         self.x2 = x2
...         self.y2 = y2
...     
>>> def fringe8(point, rect):
...     # ...
...
>>>
>>> point = Point(2, 2)
>>> …
Run Code Online (Sandbox Code Playgroud)

python iterable function code-design

3
推荐指数
1
解决办法
206
查看次数

为什么UnderscoreJS具有许多原生Javascript函数的包装函数?

我注意到UnderScoreJS具有许多围绕本机Javascript函数的包装函数。

举个例子:

_.isArray, _.isBoolean, _.isNaN?
Run Code Online (Sandbox Code Playgroud)

有什么理由吗?还是在使用underscoreJS库时仅仅是为了确保代码一致性而已,还是无论如何都只是增强了这些功能?

例如,_。isArray函数可以简化为:

_.isArray = nativeIsArray || function(obj) {
    return toString.call(obj) === '[object Array]';
  };
Run Code Online (Sandbox Code Playgroud)

任何的想法?

javascript code-design underscore.js

3
推荐指数
1
解决办法
120
查看次数

这是python的一个很好的编码实践吗?

if preset.exists('//*[@id="i0116"]', '10', '1'):
    if (log.enter_username()):
        if preset.exists('//*[@id="i0116"]', '10', '1'):
            if (log.enter_password()):
                locked = unlock(details[0], details[1], browser, ' ', ' ', ' ')
                if not (locked.checkBlocked()):
                    # unlock account
                else:
                    searches = search(details[0], details[1], browser)
            else:
                browser.quit()
                continue
        else:
            browser.quit()
            continue
    else:
        browser.quit()
        continue
else:
    browser.quit()
    continue
Run Code Online (Sandbox Code Playgroud)

我正在使用Python制作一个机器人,我有很多异常处理要做到这一点,我可能最终会有至少5个以上的这些,如果是的话,其他的......

我在这里做错了吗?我应该在方法本身内部硬编码这些异常,而不是使用控制文件来执行此操作吗?

python if-statement exception-handling code-design

3
推荐指数
1
解决办法
48
查看次数

DRY是否意味着性能更好的应用程序?

我一再被告知在编程时不要重复自己.我遇到过一个场景,我想知道是编写两个函数,每个函数用于特定目的,还是一个函数来处理这两个目的.我不确定什么是"最佳实践"方法:

所讨论的所有函数都涉及允许一个人将列表项的等级改变一个位置,加上或减去一个.所有项目及其等级都保存在MySQL数据库表中.)

两个函数一个用于将项目的等级向上移动一个,另一个用于将等级向下移动一个.

一个函数我可以通过添加"方向"的附加参数并使用if语句来决定是向上还是向下移动项目,将相同的函数写入一个函数.

在性能方面,编写两个函数并让它们共享负载会更好吗?如果相同的功能接收大量请求,是否存在"功能过载"这样的事情?

我不认为它是相关的,但我正在使用ColdFusion,而我的附加"方向"参数将是一个包含在语句中的字符串,该语句检查它的值以确定要采取的操作.

code-design

2
推荐指数
1
解决办法
388
查看次数

支持和反对对象处理自身持久性的原因

我正在研究使用独立存储在Windows Phone中进行持久性建模的不同选项.我提出的一个想法是每个对象处理它自己的概念(当然是理所当然的)持久性,而不是为了保存对象而创建一个存储库或其他这样的实体.

我似乎无法找到关于这种持久性方法的任何好信息,这让我相信我可能偶然发现了一种反模式.

有没有人以这种方式接近坚持?如果是这样的话,你对这种方法的看法是什么?

c# persistence design-patterns code-design

2
推荐指数
1
解决办法
110
查看次数

防止未分配的对象,这是一个糟糕的设计考虑因素吗?

在我的WPF应用程序中,我有几个基于记录的给定ID的地方,我调用一个新表单作为模态显示以查看详细信息.然后它会关闭并返回到预期的调用源.这一切都没有问题.

为了简化编码,我在显示的表单的构造函数的末尾添加了一个"ShowDialog()"调用.这可以防止每个地方需要这种形式被称为需要...

var myModalForm = new MyModalForm(someIdToDisplay);
myModalForm.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

简化,我只需要用Id创建模态表单,例如

new MyModalForm(someIdToDisplay);
Run Code Online (Sandbox Code Playgroud)

但是通过ReSharper检查器,它返回"由'new'表达式创建的可能未分配的对象".

我知道垃圾收集器会在它完成后得到它,但作为一个模态形式,一旦完成,我不需要用它做任何其他事情.所以,这是不好的,还是好的,只是忽略这种警告的考虑.其他一切在应用程序中工作正常.

c# wpf resharper code-design

2
推荐指数
1
解决办法
917
查看次数

使用字符串而不是枚举?

与枚举相比,使用字符串进行比较是否常见?

c# methods code-design

1
推荐指数
1
解决办法
247
查看次数

创建一个显示UIAlertView的实用工具类

我有这个警报:

没有互联网连接,请再试一次

我必须有许多代码块可以产生这个消息,我想把它放在UIAlertView一个我不会每次都创建它的类中,这可能吗?

iphone objective-c uialertview code-design ios

1
推荐指数
1
解决办法
1991
查看次数

Vs类纯阵列表示

我们需要在我们的应用程序中代表大量数字.我们使用整数数组来做这个.最终的生产应该是性能最大化.我们考虑将数组封装在一个类中,这样我们就可以添加与数组相关的属性,如isNegative,numberBase等.

但是,我们担心使用课程会使我们的表现明智.我们做了一个测试,我们创建了一个固定数量的数组,并通过纯数组使用设置它的值,并创建一个类,并通过类访问数组:

for (int i = 0; i < 10000; i++)
{
    if (createClass)
    {
        BigNumber b = new BigNumber(new int[5000], 10);
        for (int j = 0; j < b.Number.Length; j++)
        {
            b[j] = 5;
        }
    }
    else
    {
        int[] test = new int[5000];
        for (int j = 0; j < test.Length; j++)
        {
            test[j] = 5;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并且似乎使用类几乎将上述代码的运行时间减慢了6倍.我们通过将数组封装在结构中来尝试上述操作,这导致运行时间几乎等于纯数组使用.

与结构相比,使用类时导致这种巨大开销的原因是什么?当你使用堆栈而不是堆时,它真的只是你获得的性能提升吗?

编辑: BigNumber只将数组存储在属性公开的私有变量中.简化:

public class BigNumber{
  private int[] number;

  public BigNumber(int[] number) { this.number = …
Run Code Online (Sandbox Code Playgroud)

c# arrays performance code-design

0
推荐指数
1
解决办法
982
查看次数