get和set值
get和set值
还在开发web程序的时候,用PHP语言,从$_GET变量中取某个key的值,会发生key不存在的情形。这样PHP会有一个Notice提示,我不想看到Notice错误发生,在程序中用如下的方法来处理:
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
用三元表达式来取一个值,有一些繁琐,在写了大量的三元表达式之后,我念叨,为什么不用一个函数来代替三元表达式呢?于是写了下面这个函数:
function ARRV($arr = array(), $key = '', $v = '') {
if (!is_array($arr)) {
return $v;
}
if (!isset($arr[$key])) {
return $v;
}
return $arr[$key];
}
function GET($key = '', $v = '') {
return ARRV($_GET, $key, $v);
}
function POST($key = '', $v = '') {
return ARRV($_POST, $key, $v);
}
$id = GET('id', 0);
用GET这个函数非常方便,从此代码中再不用“三元表达式”了,而且我把这种方式告诉同事,他们在写含有“大量三元表达式”的地方,也都用一个函数来代替了。
后来又有一天,做一个数据库查询功能,有如下一段逻辑,用伪代码表示:
$val = mysql.select(key);
if (empty($val)) {
$val = 0;
mysql.insert(key, 0);
}
代码想表达的意思就是数据库中不存在某个值,就添加一个初始值。和前面那个取$_GET的值有一些“逻辑相似性”,都是为了处理“意外情况”,于是乎写了一个函数:
getorset($key, $default)
在这个函数里头处理“不存在就设定一个初始值”的逻辑。能意识到”把重复的逻辑进行抽象”需要一定的思维敏锐度才行。不然大脑一懒,又用重复的方法,在代码中添加了两三句if…else,留下一堆“无聊的代码”。
今天看PYTHON的书,突然发现,PYTHON语言自带了get与setdefault的方法。
v1 = arr.get(key, 0) // arr中没有key,就返回0
v2 = arr.setdefault(key, 0) // arr中没有key,将arr[key]设为0,再返回
心里一阵难过,要是自己早几年学习过PYTHON,那么上面PHP的代码里面包含的思路,不就早就学会了吗?
突然又联想到上一篇博客《游戏开发-让工作更顺畅》中提到的做法,其实也是一个get & set value的问题。
又想起某些程序语言的设计者,一再强调,申明变量要给一个初始化的值。而Go语言的设计者提出,申明变量自动初始化为0,其实都是为了处理“值没有被正确设置引发的问题”。
学习更多的语言,会让自己的思维变得更开阔,一点也没有错。
浙公网安备 33010602011771号