标签: coding-style

使用try/catch防止应用程序崩溃

我一直在研究一款try/catch经常使用的Android应用程序,以防止它甚至在没有必要的地方崩溃.例如,

xml layout带有的视图id = toolbar引用如下:

// see new example below, this one is just confusing
// it seems like I am asking about empty try/catch
try {
    View view = findViewById(R.id.toolbar);
}
catch(Exception e) {
}
Run Code Online (Sandbox Code Playgroud)

整个应用程序都使用此方法.堆栈跟踪没有打印,很难找到出错的地方.应用程序突然关闭而不打印任何堆栈跟踪.

我让我的大四学生向我解释,他说,

这是为了防止生产中的崩溃.

我完全不同意它.对我而言,这不是阻止应用程序崩溃的方法.它表明开发人员知道他/她在做什么,并且有疑问.

这是行业中使用的方法,以防止企业应用程序崩溃?

如果try/catch是真的,那么我们真的需要可以附加一个带有UI线程或其他线程的异常处理程序并捕获所有内容吗?如果可能的话,那将是更好的方法.

是的,空try/catch是坏的,即使我们将堆栈跟踪或日志异常打印到服务器,try/catch在所有应用程序中随机包装代码块对我来说没有意义,例如当每个函数都包含在a中时try/catch.

UPDATE

由于这个问题引起了很多关注,有些人误解了这个问题(也许是因为我没有明确表达过),我将把它改写一下.

这是开发人员在这里做的事情

  • 一个函数被编写和测试,它可以是一个小函数,它只是初始化视图或复杂的视图,在测试后它被包裹在try/catch块中.即使是永远不会抛出任何异常的函数.

  • 这种做法在整个申请中使用.有时会打印堆栈跟踪,有时只会出现debug log一些随机错误消息.此错误消息因开发人员而异.

  • 使用这种方法,应用程序不会崩溃,但应用程序的行为变得不确定.甚至有时候很难跟上出错的地方.

  • 我一直在问的真正问题是; 为了防止企业应用程序崩溃,业界是否遵循这种做法?而且我不是在询问空的try/catch.是不是,用户喜欢不会比意外行为的应用程序崩溃的应用程序?因为它真的归结为崩溃或用空白屏幕呈现用户或行为用户不知道.

  • 我在这里发布了一些真实代码的片段

      private void …
    Run Code Online (Sandbox Code Playgroud)

java android design-patterns coding-style try-catch

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

枚举的单数或复数?

您是使用单数还是复数进行枚举?我认为在宣言中使用复数是最合理的

enum Weekdays
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}
Run Code Online (Sandbox Code Playgroud)

...但我认为使用该类型时,单数形式更有意义,例如

Weekday firstDayOfWeek = Weekday.Monday;
Run Code Online (Sandbox Code Playgroud)

我在某个地方读了一个建议,使用单数的常规枚举和带有标志的复数,但我想听到更多的利弊.

enumeration coding-style

76
推荐指数
6
解决办法
2万
查看次数

Python异常链接

是否有在Python中使用异常链的标准方法?像Java引起的'异常'一样?

这是一些背景知识.

我有一个带有一个主要异常类的模块DSError:

 class DSError(Exception):
     pass
Run Code Online (Sandbox Code Playgroud)

在这个模块的某个地方会有:

try:
    v = my_dict[k]
    something(v)
except KeyError as e:
    raise DSError("no key %s found for %s" % (k, self))
except ValueError as e:
    raise DSError("Bad Value %s found for %s" % (v, self))
except DSError as e:
    raise DSError("%s raised in %s" % (e, self))
Run Code Online (Sandbox Code Playgroud)

基本上这个片段应该只抛出DSError并告诉我发生了什么以及为什么.问题是try块可能会抛出很多其他异常,所以我更喜欢我能做的事情如下:

try:
    v = my_dict[k]
    something(v)
except Exception as e:
    raise DSError(self, v, e)  # Exception chained...
Run Code Online (Sandbox Code Playgroud)

这是标准的pythonic方式吗?我没有在其他模块中看到异常链,那么在Python中如何完成?

python coding-style exception python-2.x

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

Intellij(Android studio)成员变量前缀

如何配置Android Studio(或通常为Intellij)以正确生成带前缀的成员变量的getter和setter?

如果我有课

public class Foo{
    int mBar;
}
Run Code Online (Sandbox Code Playgroud)

我希望它创造getBar()而不是getMBar当我做Refactor->EncapsulateGenerate

编辑

我找到了按项目进行的方法:你去吧 File->Settings->Project Settings->Code Style

但它在我的项目目录中的某处创建了一个设置文件.

我想要一个解决方案,允许我为所有项目,现在和将来做一次.

java coding-style intellij-idea android-studio

75
推荐指数
3
解决办法
2万
查看次数

良好的Haskell编码标准

有人可以为Haskell提供良好编码标准的链接吗?我发现了这个这个,但它们远非全面.更不用说HaskellWiki包含诸如"谨慎使用类"之类的"宝石","定义符号中缀标识符应仅留给图书馆作者".

haskell coding-style conventions

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

创建随机数矩阵的简单方法

我试图创建一个随机数矩阵,但我的解决方案太长,看起来很难看

random_matrix = [[random.random() for e in range(2)] for e in range(3)]
Run Code Online (Sandbox Code Playgroud)

这看起来不错,但在我的实现中它是

weights_h = [[random.random() for e in range(len(inputs[0]))] for e in range(hiden_neurons)]
Run Code Online (Sandbox Code Playgroud)

这是非常难以理解的,不适合一条线.

python random coding-style

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

为什么从代码中调用eventhandler是不好的做法?

假设您有一个菜单项和一个执行相同任务的按钮.为什么将任务的代码放入一个控件的动作事件然后从另一个控件调用该事件是不好的做法?Delphi允许这和vb6一样,但是realbasic没有,并且说你应该将代码放入一个方法,然后由菜单和按钮调用

delphi vb6 coding-style realbasic

73
推荐指数
6
解决办法
6584
查看次数

手动调用析构函数总是一个糟糕的设计标志?

我在想:他们说如果你手动调用析构函数 - 你做错了什么.但情况总是这样吗?有反例吗?有必要手动调用它或者难以避免的情况/不可能/不切实际的情况吗?

c++ destructor coding-style

73
推荐指数
6
解决办法
9万
查看次数

明确地与布尔常量进行比较是不好的,例如在Java中是否(b == false)?

写不好

if (b == false) //...

while (b != true) //...
Run Code Online (Sandbox Code Playgroud)

是不是总是更好,而不是写:

if (!b) //...

while (!b) //...
Run Code Online (Sandbox Code Playgroud)

据推测,性能没有差异(或者存在?),但是如何衡量两者之间的显性,简洁性,清晰度,可读性等?

更新

为了限制主观性,我还要感谢来自权威编码风格指南的任何引用,这些引用始终是优选的,或者在何时使用.


注意:变量名称b仅用作示例,ala foobar.

java boolean coding-style

72
推荐指数
7
解决办法
2万
查看次数

R中的点是什么意思 - 个人偏好,命名约定或更多?

我(可能)不是指"所有其他变量",意思就像var1~.这里一样.我plyr再次指出并调查mlply并想知道为什么参数是用这样的前导点定义的:

function (.data, .fun = NULL, ..., .expand = TRUE, .progress = "none", 
.parallel = FALSE) 
{
if (is.matrix(.data) & !is.list(.data)) 
    .data <- .matrix_to_df(.data)
f <- splat(.fun)
alply(.data = .data, .margins = 1, .fun = f, ..., .expand = .expand, 
    .progress = .progress, .parallel = .parallel)
}
<environment: namespace:plyr>
Run Code Online (Sandbox Code Playgroud)

有什么用?这只是个人偏好,命名惯例还是更多?通常R是如此功能,以至于我错过了以前很久以前完成的技巧.

coding-style r naming-conventions plyr

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