在应用程序开发中,存在防御性编程的概念.如何使用Transact-SQL实现防御性编程技术和编写健壮的代码?
sql database sql-server defensive-programming sql-server-2008
例如,当最初输入数据时,如果它与我的验证正则表达式不匹配,我可能会将其吐出。然后当我需要使用它的时候,我常常会产生这样的冲动:
function useData(data) {
if(data.match(/some invalidating substring/) throw Error('Shouldn\'t have ever gotten past the orig. regex, but somehow it did, so its good that this extra layer of debugging info was integrated.');
// actually use the data.
}
Run Code Online (Sandbox Code Playgroud)
我并不是真的在谈论安全性,因为那样你就需要深度防御。我所指的代码类型通常对安全性不敏感,我只是想编写设计良好的代码,很有可能发现错误。从某种意义上说,深度防御也需要防止故障,而且不仅仅是漏洞,我想,但与此同时,Unix 哲学要求代码只做一件事,而且只是做那件事,但要做得好。考虑到这一点,不“信任”您的验证代码来完成其工作,然后在另一个函数中的某个地方制作另一段验证代码,“以防万一”,这似乎是不好的做法。用两段代码做一件事也不是好事。另一个缺点是,如果您更改验证模式,那么您可能会忘记在两个地方都这样做。
反馈?
我试图用防御性编程来做这个小程序,但是我很难处理这个避免Loop-Goto,因为我知道这是BAD编程.我曾尝试过,并且做...而循环,但在一个案例中,我没有问题.当我要做另一个时,问题开始...而对于第二种情况("不插入空格或点击输入按钮").我尝试和嵌套做...虽然但在这里结果更复杂.
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int i;
int length;
char giventext [25];
Loop:
printf("String must have 25 chars lenght:\n");
gets(giventext);
length = strlen(giventext);
if (length > 25) {
printf("\nString has over %d chars.\nMust give a shorter string\n", length);
goto Loop;
}
/* Here i trying to not give space or nothing*/
if (length < 1) {
printf("You dont give anything as a string.\n");
goto Loop;
} else {
printf("Your string has %d\n",length);
printf("Letter in lower …Run Code Online (Sandbox Code Playgroud) 比如在运行期间删除输出文件,将sw的两个实例指向同一个IO等?
defensive-programming desktop-application application-design
我见过像这样编码的防御性副本
void someMethod(Date d) {
myDate = new Date( d.getTime() );
}
Run Code Online (Sandbox Code Playgroud)
但这对我来说没有意义,在Java中是否有办法在该对象的内存中创建相同的副本?
我已经读过clone()不会在所有情况下都行不通,但我不明白为什么.
大家好:在java中,我们都有使用我们的ide来"遍历"复杂数据类型深度的经验:
dog.getCollar().getCollarTag().getName();
Run Code Online (Sandbox Code Playgroud)
然而,在Clojure中,由于缺乏静态类型,这变得非常简单.我们如何"防御"或反对可能从嵌套数据结构到达的复杂性?
1)对clojure数据结构深度的可取"限制"?
和
2)处理非常深层嵌套的数据结构的常用习惯用法,它可以防止诸如将列表误认为映射之类的错误,或者无法正确地降低/大写变量名称?
请原谅我,如果我在这里听起来有点偏离范例......可能是这样的错误通过在REPL中不断测试而得到有效抑制.但是,我想知道是否还有其他方法可以确保,在编译时,代码尽可能正确(即单元测试,IDE/emacs插件等......)
我试图使用javascript?:语法重写下面的语句.
if(type of someVariable !="undefined"){
someFunction(someVariable);
}else{}
Run Code Online (Sandbox Code Playgroud)
这是我目前的尝试,它导致语法错误
typeof someVariable != "undefined" ? someFunction(someVariable) : ;
Run Code Online (Sandbox Code Playgroud)
如果有人能说出我遇到了什么错,我会很感激.欢迎提供有关防御性编程最佳实践的任何附带提示.
javascript variables defensive-programming if-statement function
如何测试Kotlin 中Double类型的值是否不是
Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN或其他特殊值?
我想要类似的东西 require(Double.isNormal(x))
我正在为一些验证用户出生日期的遗留代码编写一些测试。我在课堂上遇到了以下方法。我怀疑try块中的if语句是否必要。根据我的理解,如果 parse 函数成功返回一个 LocalDate 对象,那么 date.toString() 应该总是等于输入的 dobstr,并且不需要做额外的检查。我错过了什么吗?我想不出任何我们需要额外检查的情况。请帮忙。谢谢!
private LocalDate format(String dobStr) throws Exception {
LocalDate date = null;
try {
date = LocalDate.parse(dobStr, DateTimeFormatter.ISO_DATE);
if (!dobStr.equals(date.toString())) {
throw new DateTimeParseException("some message");
}
}
catch (DateTimeParseException ex) {
throw ex;
}
return date;
}
Run Code Online (Sandbox Code Playgroud)
这是我在 DateTimeFormatter.ISO_DATE 的源代码中找到的
public static final DateTimeFormatter ISO_DATE;
static {
ISO_DATE = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.append(ISO_LOCAL_DATE)
.optionalStart()
.appendOffsetId()
.toFormatter(ResolverStyle.STRICT, IsoChronology.INSTANCE);
}
Run Code Online (Sandbox Code Playgroud) 从C\C++\Java开始 -
int 2a ; //invalid suffix "a" on integer constant
虽然它是有效的语法,但是其他变体名称中的数字是否有任何问题?
喜欢 -
int num1 ;
int num_1st ;
int num_2nd ;
Run Code Online (Sandbox Code Playgroud)