|
|
|
| Несколько минут назад обратился за помощью к одному очень хорошему знакомому. Скинул ему такой кусок кода:
<?php
function base64dec($data){
global $alfabet;
$sp=hexdec(substr($data,0,1));
$data=substr($data,1);
$bin='';
for($i=0;$i<strlen($data);$i++)$bin.=str_pad(decbin(strpos($alfabet,$data[$i])),6,'0',STR_PAD_LEFT);
$bin=$sp!=0?substr($bin,0,-intval($sp)):$bin;
$res='';
for($i=0;$i<strlen($bin);$i+=8)$res.=chr($t=bindec(substr($bin,$i,8)));
return $res;
}
?>
|
// кусок был побольше, но сути это не меняет
Вот его ответ:
------------------------
Dmitry (02:47:48 27/08/2007)
ну и стиль...
------------------------
Т.к. я уже не раз слышу такое в свой адрес, я спросил, а что собсна не понравилось?
Ответ меня оч сильно задел:
-----------------------
Dmitry (02:48:37 27/08/2007)
с опытом приходит.. я раньше точ также писал... щас намного лучше юзабельность
-----------------------
Можно подумать у меня опыта мало.
После прочтения вот этой статейки, попробовал переписать код в "правильном" стиле. Вообще у меня глаза разбегаются, когда операторы стоят на таком расстоянии. Не могу сосредоточиться.
<?php
function base64dec($data){
global $alfabet;
$sp = hexdec(substr($data, 0, 1));
$data = substr($data, 1);
$bin = '';
for($i=0; $i < strlen($data); $i++)$bin .= str_pad(decbin(strpos($alfabet, $data[$i])), 6, '0', STR_PAD_LEFT);
$bin = $sp != 0 ? substr($bin, 0, -intval($sp)) : $bin;
$res = '';
for($i=0; $i < strlen($bin); $i += 8)$res .= chr($t = bindec(substr($bin, $i, 8)));
return $res;
}
?>
|
А уж обрамлять односимвольный оператор пробелами... для меня это дико.
Когда читаю чужой код, сначала переписываю его под себя, потом только начинаю вникать. "Чужие" стили меня раздражают и отвлекают от сути кода.
Как мне переучиться оформлять код "правильно"? И чтоб я сам потом мог спокойно прочесть то, что написал. Посоветуйте наиболее популярный стиль, который будет удобен большинству.
P.S. знакомый так и не решил мою проблему =) | |
|
|
|
|
|
|
|
для: sms-send
(27.08.2007 в 03:50)
| | Интересная ссылка! Из неё я узнал, что пишу в стиле Алмена, хотя и не подозревал о его существовании. Оказывается, изобилие пробелов и комментариев - отнюдь не порок... | |
|
|
|
|
|
|
|
для: sms-send
(27.08.2007 в 03:50)
| | > "Чужие" стили меня раздражают и отвлекают от сути кода.
С этим нужно бороться, так как при работе в команде не только необходимо читать код с чужим стилем, но и самому уметь его менять по первому требованию. Неплохо даже потренироваться их менять. | |
|
|
|
|
|
|
|
для: cheops
(27.08.2007 в 11:46)
| | >> "Чужие" стили меня раздражают и отвлекают от сути кода.
>С этим нужно бороться, так как при работе в команде не только необходимо читать код с чужим стилем, но и самому уметь его менять по первому требованию. Неплохо даже потренироваться их менять.
Именно по этому и создал тему, раньше меня это особо не беспокоило. | |
|
|
|
|
|
|
|
для: sms-send
(27.08.2007 в 03:50)
| | > Скинул ему такой кусок кода:
Ого. Моск сломаешь, пока разберешься =]
Второй вариант тоже не многим лучше.
Конечно же, имхо.
> Посоветуйте наиболее популярный стиль, который будет удобен большинству.
Может быть http://pear.php.net/manual/ru/standards.php | |
|
|
|
|
|
|
|
для: kasmanaft
(27.08.2007 в 11:52)
| | >> Скинул ему такой кусок кода:
>Ого. Моск сломаешь, пока разберешься =]
>Второй вариант тоже не многим лучше.
>Конечно же, имхо.
Может кто то перепишет и покажет на примере как должен выглядеть этот кусок кода?
>> Посоветуйте наиболее популярный стиль, который будет удобен большинству.
>Может быть http://pear.php.net/manual/ru/standards.php
Настойчиво рекомендуется использовать фигурные скобки, даже в том случае, когда их использование не является необходимостью.
брр... в чем разница?
<?php
if(true)echo 'it\'s true';
else echo 'it\'s false';
?>
|
<?php
if(true){echo 'it\'s true';}
else{echo 'it\'s false';}
?>
|
И ещё вопрос насчёт расположения операторов конструкции if-eseif-else.
Как лучше?
<?php
if($n==1){
// блок
// операторов 1
}elseif($n==2){
// блок
// операторов 2
}elseif($n==3){
// блок
// операторов 3
}else{
// блок
// операторов
// по умолчанию
}
?>
|
<?php
if($n==1){
// блок
// операторов 1
}
elseif($n==2){
// блок
// операторов 2
}
elseif($n==3){
// блок
// операторов 3
}
else{
// блок
// операторов
// по умолчанию
}
?>
|
<?php
if($n==1)
{
// блок
// операторов 1
}
elseif($n==2)
{
// блок
// операторов 2
}
elseif($n==3)
{
// блок
// операторов 3
}
else{
// блок
// операторов
// по умолчанию
}
?>
|
| |
|
|
|
|
|
|
|
для: sms-send
(27.08.2007 в 14:08)
| | > Может кто то перепишет и покажет на примере как должен выглядеть этот кусок кода?
Да кто его знает, как он должен выглядеть :) Может выглядеть по-Вашему, если этот стиль будет понятен всем из команды (и соответственно, все его будут придерживаться).
По стандартам PEAR этот код выглядел бы так: (или почти так)
<?php
function base64dec($data)
{
global $alfabet;
$sp = hexdec(substr($data, 0, 1));
$data = substr($data, 1);
for ($i = 0, $bin = ''; $i < strlen($data); $i++) {
$pos = strpos($alfabet, $data[$i]);
$bin .= str_pad(decbin($pos), 6, '0', STR_PAD_LEFT);
}
if ($sp != 0) {
$bin = substr($bin, 0, -intval($sp));
}
for($i = 0, $res = ''; $i < strlen($bin); $i += 8) {
$res .= chr($t = bindec(substr($bin, $i, 8)));
}
return $res;
}
?>
|
>Настойчиво рекомендуется использовать фигурные скобки, даже в том случае, когда их использование не является необходимостью.
>брр... в чем разница?
Думаю, имеется ввиду
if (true) {
echo "it's true";
} else {
echo "it's false";
}
|
> И ещё вопрос насчёт расположения операторов конструкции if-eseif-else. Как лучше?
Мне больше первый нравится. (только Вы забываете пробелы расставлять "В управляющих структурах между ключевым словом и открывающей круглой скобкой должен находиться пробел, чтобы отличать их от вызова функций.")
Как договорится группа перед кодированием, так и будет лучше) | |
|
|
|
|
|
|
|
для: sms-send
(27.08.2007 в 14:08)
| | >И ещё вопрос насчёт расположения операторов конструкции if-eseif-else. Как лучше?
Лучше наверное так:
<?
switch ($n) {
case 1: // блок операторов 1
break;
case 2: // блок операторов 2
break;
case 3: // блок операторов 3
break;
default: // блок операторов по умолчанию
}
?>
|
| |
|
|
|
|
|
|
|
для: sms-send
(27.08.2007 в 14:08)
| | Моими руками он бы выглядел так:
<?php
function base64dec($data)
{
global $alfabet;
$sp = hexdec(substr($data, 0, 1));
$data = substr($data, 1);
for ($i=0, $bin=''; $i<strlen($data); $i++)
{
$pos = strpos($alfabet, $data[$i]);
$bin .= str_pad(decbin($pos), 6, '0', STR_PAD_LEFT);
}
if ($sp != 0)
{
$bin = substr($bin, 0, -intval($sp));
}
for ($i=0, $res=''; $i<strlen($bin); $i+=8)
{
$res .= chr($t = bindec(substr($bin, $i, 8)));
}
return $res;
}
?>
|
| |
|
|
|
|
|
|
|
для: sms-send
(27.08.2007 в 03:50)
| | Слова "alfabet" не существует. В английском, по крайней мере. Есть слово "alphabet".
Слова "decode" и "decimal" сокращаете одинаково, хотя в коде присутствует и то, и другое.
Зачем-то лишние переменные объявляете. Вроде $t. | |
|
|
|
|
|
|
|
для: Unkind
(27.08.2007 в 13:30)
| | >Слова "alfabet" не существует. В английском, по крайней мере. Есть слово "alphabet".
>
:-[
>Слова "decode" и "decimal" сокращаете одинаково, хотя в коде присутствует и то, и другое.
>
Вообще, это не конечный вариант, тем более функция парная base64enc() - base64dec(), а названия такие, потому что не было времени (и желания) придумать лучше, ведь base64_encode() и base64_decode() уже заняты, а суть функций полностью совпадает, нужно было отработать сам алгоритм, для портирования в другой язык. А вообще да, может в итоге сбить с толку другого человека.
>Зачем-то лишние переменные объявляете. Вроде $t.
Да, как я говорил, функция ещё не готова, точнее работает не совсем так как хотелось бы, и эти лишние переменные нужны в целях отладки ($t от англ. "temporary"). | |
|
|
|
|
|
|
|
для: sms-send
(27.08.2007 в 03:50)
| | Извините, что не в тему...
А оно нужно было - такой велосипед изобретать?
base64_decode() никак не удовлетворяла?
В конце концов, если алфавит нестаднартный применяется, можно обложку написать
function base64dec($data)
{
global $alphabet;
return base64_decode( strtr($data, $alphabet, "ABC...XYZabc...xyz01..89+/" ).'==');
}
|
| |
|
|
|
|
|
|
|
для: Trianon
(27.08.2007 в 16:04)
| | > А оно нужно было - такой велосипед изобретать?
нужно было отработать сам алгоритм, для портирования в другой язык
|
| |
|
|
|
|
|
|
|
для: Unkind
(27.08.2007 в 18:24)
| | Понятно. На мелком экране - пропустил.
Тогда алгоритм явно не отработан. | |
|
|
|
|
|
|
|
для: Trianon
(27.08.2007 в 21:15)
| | sms-send, насколько я в курсе ты еще на Delphi пишешь, это его дурное влияние =D
Лично я без фигурных скобок вообще не могу обойтись. | |
|
|
|
|
|
|
|
для: Trianon
(27.08.2007 в 21:15)
| |
<?
$abc = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
. 'abcdefghijklmnopqrstuvwxyz'
. '0123456789+/';
function base64dec($data)
{ global $abc;
$sextets = strlen($data);
for($res = '', $acm=0, $bits = 0, $i = 0; $i < $sextets; $i++)
{
if(($nibble = strpos($abc, $data[$i])) === false)
break;
if($nibble >=64)
continue;
$acm<<=6; $acm |= $nibble;
if(($bits += 6) >= 8)
$res .= chr($acm >> ($bits -= 8));
}
return $res;
}
|
Желающие могут нападать и на алгоритм и на стиль.
Но отбиваться буду яростно. То есть - молча.:) | |
|
|
|
|
|
|
|
для: Trianon
(27.08.2007 в 23:12)
| | RLC/RRC/RAL/RAR по вам плачут :-D Вы еще пишете на PHP? Тогда ассемблер идет к вам !!! :) | |
|
|
|