看板 tails
作者 標題 [PHP] 很無聊的小技巧
時間 2012年04月02日 Mon. PM 03:15:36
突然間終於了解這句後面在幹嘛的了 (Joomla / Xoops / Zend Framework等框架都會有類似這句)
defined(const) or die();
原本是知道這句是
const未定義時
它就會終止程式執行
依照不過我原先寫法可能就是
if(!defined(const))
{
}
{
die();
}
是很好懂,不過蠻多行的
以框架的用途來說一開始寫這樣
可能會有點多
雖然if也是能這樣寫:
if(!defined(const)) die();
但可能還是最上面這個寫法最好吧:
defined(const) or die();
至於為何能這麼用的原因是基於or / and / || / && 的特性 (| / & 不在此列)
or / ||的情況是,只要前面能決定是true,後面就不需要管了。
相反的
and / &&是只要前面能決定是false,後面也一樣不用做了。
所以參考上面的程式碼
or左邊的defined(const)只要是true,右邊的die()自然不會動作。
and / &&的例子 (參考網頁):
void quickSort(int number[], int left, int right) {
if(left < right) {
int i = left;
int j = right + 1;
while(1) {
// 向右找
while(i + 1 < MAX && number[++i] < number[left]) ;
// 向左找
while(j -1 > -1 && number[--j] > number[left]) ;
if(i >= j)
break;
SWAP(number[i], number[j]);
}
SWAP(number[left], number[j]);
quickSort(number, left, j-1); // 對左邊進行遞迴
quickSort(number, j+1, right); // 對右邊進行遞迴
}
}
if(left < right) {
int i = left;
int j = right + 1;
while(1) {
// 向右找
while(i + 1 < MAX && number[++i] < number[left]) ;
// 向左找
while(j -1 > -1 && number[--j] > number[left]) ;
if(i >= j)
break;
SWAP(number[i], number[j]);
}
SWAP(number[left], number[j]);
quickSort(number, left, j-1); // 對左邊進行遞迴
quickSort(number, j+1, right); // 對右邊進行遞迴
}
}
中間的向右找、向左找也是使用&&的特性
這種寫法應該會比if快(吧)
只是這樣的寫法可能會增加閱讀程式的困難
使用上可能需要加點註解會比較好
--
※ 作者: tails 時間: 2012-04-02 15:15:36
※ 編輯: tails 時間: 2012-04-28 19:41:20
※ 看板: tails 文章推薦值: 0 目前人氣: 0 累積人氣: 264
回列表(←)
分享