コード化の道——コードの清潔さと論理
4348 ワード
コード化の道——コードの清潔さと論理
ほとんどの場合、「コードが簡潔であればあるほど良い」という言葉を提唱していますが、多くの場合、この言葉の意味を誤解しています.コードの簡潔さは簡単ではありません.
個人的にコードの簡潔さに注意しなければならないのは以下の2点です.1、コードを省略することができなくて、簡潔は簡単ではありません; 2、コードの簡潔なレベルは抽象的で具体的である. 3、コードの論理は必ず厳格でなければならない.
以前私がいつものように彼はコードの最適化過程を映画を見るのと見なしていた.ここでは、コード全体の最適化プロセスを例に挙げて、彼女を映画に連れて行って、彼女に映画を見る方法を教える必要があります.
コード1-1で示すプロセスは
XXさん、映画を見に行きましょう.それから帰ってきます.
この過程について私たちは簡単な目的しか見ていませんが、具体的な細部は無視されています.例えば、私たちは何時に映画を見に行きますか.どこで映画を見に行きますか.どんな映画を見に行きますか.
コード1-1:
このコードに対してみんなの感じが何なのか分からないで、厳格ではありませんて、コードは簡単で、バグが現れやすいです.
次に、コード1-2で表されるプロセスをいくつか変更します.
私达は6:00学校の入り口から出発して、あなたは先にタクシーに乗って、私は后列の右侧に座って、あなたは后列の左侧に座って、着いたら私は先に降りて、それからドアを开いて、一绪に映画馆まで歩いて、私达は先に真ん中の位置を买って、もし2人が席を离れた私达は1つの位置を交换して、もし真ん中の位置がなければ、私达は后列のそばに座って、映画を见る时、私はあなたを抱いて待っています.
これを見てみんなは笑いたいと思っています.彼女がそれを聞いた後、「この男はだめだ.うるさい!」と思ったのかもしれません.
全体の过程から多くの细部を暴露して、実はこれらの细部は完全にカプセル化することができて、コードはストーリのように、いくつか私达が见たくない过程、细部を暴露して、例えばどのように车に乗って降りてこのような事は映画を见ることと関系がなくて、私达はこれらに関心がなくて、彼女がこれらを闻く时だけ、私达は彼女にこれらの细部を教えて、直接全体の过程を暴露するのではありません
コードが完全に書かれた後、コード1-1に問題があることが分かったかどうか分かりません.コード1−1のコード量は少ないが,特にコードの論理的厳密性には多くの問題がある.しかし、コード1-2には問題があり、主にコードが簡潔で抽象的ではない.このようなコードは厳格ですが、私たちのcodeに必要なコードではないか、具体的なものを抽象化しなければなりません.
次はさらに改善します.と理解できる
私达は6时に学校を出発して、タクシーでXX映画馆の入り口に着いて、それから7时にそこに着いて、絵の皮を见て2、大体9时に见终わって、それから私达はタクシーで帰ってきます.
この全体の過程はとても簡潔で、私たちが映画を見に行く過程をはっきり表現することができて、いくつかの細部の問題、私たちは暴露していないで、彼を隠して、私たちがこれらの細部を知らないというわけではありません.彼女が私に「私たちは真ん中に座っているのか、そばに座っているのか」と聞いたとき、彼女は聞いて、私たちは直接この細部を映画を見る過程に暴露したというのではなく、私たちは答えました.
プロセス全体から、最終的なコードが必要であることがわかります.開発者に多くのことを学ぶことができる簡単な付与プロセスです.
コードを書くには厳格で、厳格な過程でコードの清潔さを重視しなければならない.
ほとんどの場合、「コードが簡潔であればあるほど良い」という言葉を提唱していますが、多くの場合、この言葉の意味を誤解しています.コードの簡潔さは簡単ではありません.
個人的にコードの簡潔さに注意しなければならないのは以下の2点です.
以前私がいつものように彼はコードの最適化過程を映画を見るのと見なしていた.ここでは、コード全体の最適化プロセスを例に挙げて、彼女を映画に連れて行って、彼女に映画を見る方法を教える必要があります.
コード1-1で示すプロセスは
XXさん、映画を見に行きましょう.それから帰ってきます.
この過程について私たちは簡単な目的しか見ていませんが、具体的な細部は無視されています.例えば、私たちは何時に映画を見に行きますか.どこで映画を見に行きますか.どんな映画を見に行きますか.
コード1-1:
//json from clinet is like {'name':'danhuang', 'age':23, 'other':{'t':'a'}}
$mystr = $_GET['json'];
$jsonArray = json_decode($mystr, true);
$name = $jsonArray['name'];
$age = jsonArray['age'];
array_merge(array(), jsonArray['other']);
このコードに対してみんなの感じが何なのか分からないで、厳格ではありませんて、コードは簡単で、バグが現れやすいです.
次に、コード1-2で表されるプロセスをいくつか変更します.
私达は6:00学校の入り口から出発して、あなたは先にタクシーに乗って、私は后列の右侧に座って、あなたは后列の左侧に座って、着いたら私は先に降りて、それからドアを开いて、一绪に映画馆まで歩いて、私达は先に真ん中の位置を买って、もし2人が席を离れた私达は1つの位置を交换して、もし真ん中の位置がなければ、私达は后列のそばに座って、映画を见る时、私はあなたを抱いて待っています.
これを見てみんなは笑いたいと思っています.彼女がそれを聞いた後、「この男はだめだ.うるさい!」と思ったのかもしれません.
全体の过程から多くの细部を暴露して、実はこれらの细部は完全にカプセル化することができて、コードはストーリのように、いくつか私达が见たくない过程、细部を暴露して、例えばどのように车に乗って降りてこのような事は映画を见ることと関系がなくて、私达はこれらに関心がなくて、彼女がこれらを闻く时だけ、私达は彼女にこれらの细部を教えて、直接全体の过程を暴露するのではありません
//json from clinet is like {'name':'danhuang', 'age':23, 'other':{'t':'a'}}
if(!isset($_GET['json'])){
echo "can not get json from clinet";
exit;
}
$mystr = $_GET['json'];
$jsonArray = json_decode($mystr, true);
if(!$jsonArray){
echo "can not json decode, mystr is not a json string";
exit;
}
if(!(isset($jsonArray['name']) && isset(jsonArray['age']) && isset(jsonArray['other']))){
echo "parameters error";
exit;
}
$name = $jsonArray['name'];
$age = jsonArray['age'];
if(is_array(jsonArray['other'])){
array_merge(array(), jsonArray['other']);
} else {
echo "other is not a array, please check it";
exit;
}
コードが完全に書かれた後、コード1-1に問題があることが分かったかどうか分かりません.コード1−1のコード量は少ないが,特にコードの論理的厳密性には多くの問題がある.しかし、コード1-2には問題があり、主にコードが簡潔で抽象的ではない.このようなコードは厳格ですが、私たちのcodeに必要なコードではないか、具体的なものを抽象化しなければなりません.
次はさらに改善します.と理解できる
私达は6时に学校を出発して、タクシーでXX映画馆の入り口に着いて、それから7时にそこに着いて、絵の皮を见て2、大体9时に见终わって、それから私达はタクシーで帰ってきます.
この全体の過程はとても簡潔で、私たちが映画を見に行く過程をはっきり表現することができて、いくつかの細部の問題、私たちは暴露していないで、彼を隠して、私たちがこれらの細部を知らないというわけではありません.彼女が私に「私たちは真ん中に座っているのか、そばに座っているのか」と聞いたとき、彼女は聞いて、私たちは直接この細部を映画を見る過程に暴露したというのではなく、私たちは答えました.
$arr = decodeStrFromClinet('json');
$checkRet = checkIssetKeyArr($arr, array("name","age","other"));
if($checkRet){
$name = $arr['name'];
$age = $arr['age'];
if(is_array($arr['other'])){
array_merge(array(), arr['other']);
}
}
function checkIssetKeyArr($arr, $keyArr){
if(!(is_aray($arr) && is_aray($keyArr))){
echo "parameteres error. function checkIssetKeyArr"
return false;
}
for($i=0; $i<count($keyArr); $i++){
$arrKey = $keyArr[$i];
if(!isset($arr[$arrKey])){
echo "arr is not include " . $arrKey ;
return false;
}
}
}
function decodeStrFromClinet($clinetKey){
if(!isset($_GET['json'])){
echo "can not get json from clinet";
return null;
}
$arr = json_decode($_GET['json'], true);
if($arr){
return $arr;
}
echo "json is null, the str from clinet is not a json string";
exit;
}
プロセス全体から、最終的なコードが必要であることがわかります.開発者に多くのことを学ぶことができる簡単な付与プロセスです.
コードを書くには厳格で、厳格な過程でコードの清潔さを重視しなければならない.