最近Stack Overflow上出现了一群Perl-hate,所以我想我会把" 你讨厌你最喜欢的语言的五件事 "问题带到Stack Overflow.拿你最喜欢的语言告诉我你讨厌的五件事.那些可能是让你烦恼,承认设计缺陷,公认的性能问题或任何其他类别的东西.你只需要讨厌它,它必须是你最喜欢的语言.
不要将它与其他语言进行比较,也不要谈论你已经讨厌过的语言.不要用你最喜欢的语言谈论你喜欢的事情.我只想听听你讨厌但容忍的事情,这样你就可以使用所有其他的东西了,我想听听你希望别人会用的语言.
每当有人试图将他们最喜欢的语言推到我身上时,我就会问这个问题,有时也会作为面试问题.如果有人找不到讨厌他最喜欢的工具的五件事情,他就不会很清楚这一点,无论是提倡它还是使用它来获取大笔资金.他没有在足够多的情况下使用它来充分探索它.他主张将其作为一种文化或宗教,这意味着如果我不选择他喜欢的技术,我就错了.
我不在乎你使用哪种语言.不想使用特定的语言?然后不要.您是否经过尽职调查以做出明智的选择但仍然不使用它?精细.有时候正确的答案是"你有一个强大的编程团队,有很好的实践和很多Bar经验.改变Foo会是愚蠢的."
这也是代码审查的一个很好的问题.真正了解代码库的人会对它有各种各样的建议,那些不太了解代码库的人会有非特定的投诉.我问的问题是"如果你能重新开始这个项目,你会做些什么不同的事情?" 在这个幻想的土地上,用户和程序员会抱怨任何他们不喜欢的东西."我想要一个更好的界面","我想将模型与视图分开","我会使用这个模块而不是另一个","我会重命名这套方法",或者他们真的不喜欢不喜欢目前的情况.这就是我如何处理特定开发人员对代码库的了解程度.这也是关于程序员多少的线索
仇恨并不是弄清楚人们知道多少的唯一方面,但我发现它是一个非常好的维度.他们讨厌的事情也让我知道他们对这个主题的思考程度.
这是一个学术问题,但我试图在更深层次上理解框架设计.
所以我们有 String.IsNullOrEmpty(MyString)
我们可以编写一个扩展方法来启用myString.IsNullOrEmpty(),尽管这可能不是最好的想法.请参阅:使用IsNullOrEmpty扩展String类是否令人困惑?.
所以我的问题是,为什么MS不将此功能写为.Net框架的一部分?有一些性能考虑因素吗?更一般地说,为什么任何被视为有价值的方法或属性都可以通过String对象构建为不可用作为字符串类型的任何对象的成员?
我们目前正在经历为C#编写一些编码标准的漫长过程.
我最近用签名写了一个方法
string GetUserSessionID(int UserID)
Run Code Online (Sandbox Code Playgroud)
在未找到用户的会话的情况下,GetUserSession()返回null.
在我的通话代码中...我说...
string sessionID = GetUserSessionID(1)
if (null == sessionID && userIsAllowedToGetSession)
{
session = GetNewUserSession(1);
}
Run Code Online (Sandbox Code Playgroud)
在最近的一次代码审查中,审阅者说"你永远不应该从方法中返回null,因为它会在调用方法上花更多的工作来检查空值."
我立刻哭了恶作剧,好像你回来了字符串.空的你仍然需要对返回的值进行某种检查.
if (string.Empty == sessionID)
Run Code Online (Sandbox Code Playgroud)
但是,考虑到这一点,我不会在Collection/Array/List的情况下返回null.我会返回一个空列表.
对此的解决方案(我认为)将重构为2种方法.
bool SessionExists(int userID);
Run Code Online (Sandbox Code Playgroud)
和
string GetUserSessionID(int UserID);
Run Code Online (Sandbox Code Playgroud)
这次,GetUserSessionID会抛出一个SessionNotFound异常(因为它不应该返回null)
现在代码看起来像......
if(!SessionExists(1) && userIsAllowedToGetSession))
{
session = GetNewUserSession(1);
}
else
{
session = GetUserSessionID(1);
}
Run Code Online (Sandbox Code Playgroud)
现在这意味着没有空值,但对我来说这似乎有点复杂.这也是一个非常简单的例子,我想知道这将如何影响更复杂的方法.
关于何时抛出异常以及如何处理它们,有很多关于何时使用null的信息的最佳实践建议.
是否有其他人对空值的使用有任何可靠的指导(甚至更好的标准),这对可空类型意味着什么(我们应该使用它们吗?)
提前致谢,
克里斯.
=====
我已经给了egaga的答案,因为我喜欢将Get vs Find作为编码指南的建议,但所有这些都是有趣的答案.
我喜欢可读性.
所以,几分钟前我想出了一个扩展方法,用于(x =!null)类型语法,称为IsNotNull.反过来,我也创建了一个IsNull扩展方法
if(x == null) becomes if(x.IsNull())
Run Code Online (Sandbox Code Playgroud)
和
if(x != null) becomes if(x.IsNotNull())
Run Code Online (Sandbox Code Playgroud)
但是,我担心我可能会滥用扩展方法.你认为这是Extenion方法的坏用吗?
当试图弄清楚字符串是空还是空时,我通常已经有了字符串.这就是为什么我希望像String.IsNullOrEmpty()这样的实用函数能够在没有参数的情况下工作:
String myString;
bool test=myString.IsNullOrEmpty();
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,因为IsNullOrEmpty需要String参数.相反,我必须写:
String myString;
bool test=String.IsNullOrEmpty(myString);
Run Code Online (Sandbox Code Playgroud)
为什么会这样?这似乎不必要地笨重.当然我可以轻松地为此编写自己的扩展方法,但这似乎是一个非常明显的遗漏,所以我想知道是否有任何好的理由.我无法相信微软已经忘记了这个功能的无参数重载.
您必须分享哪些有用的字符串操作助手?
我曾经写过一个String.Format()的替代品,我发现它更加整洁:
public static class StringHelpers
{
public static string Args(this string str, object arg0)
{
return String.Format(str, arg0);
}
public static string Args(this string str, object arg0, object arg1)
{
return String.Format(str, arg0, arg1);
}
public static string Args(this string str, object arg0, object arg1, object arg2)
{
return String.Format(str, arg0, arg1, arg2);
}
public static string Args(this string str, params object[] args)
{
return String.Format(str, args);
}
}
Run Code Online (Sandbox Code Playgroud)
例:
// instead of String.Format("Hello {0}", name) use:
"Hello {0}".Args(name) …Run Code Online (Sandbox Code Playgroud) 可能重复:
如何检查String是否为null
我需要能够null在字符串中检查一个值.我目前所知道的最好的方法是String.IsNullOrEmpty(),它不适合我们想要做的事情(string.empty值是允许的,nulls不是).有没有人有什么建议?