Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Практика использования блока, используете ли Вы блоки в своем коде 
:(
    Опции темы
ginnie
Дата 22.4.2008, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Уважаемые коллеги!

Используете ли Вы в своем коде конструкцию с блоком (однократным циклом)

Код

my $value3 = '';
{
    my $value1 = function1();
    last unless ($value1);
    my $value2 = function2();
    last unless ($value2);
    $value3 = $value1.$value2;
}
$value3 .= 'some text';


Иногда она удобнее и лучше читается чем вариант с условиями, но, боюсь использовать, т.к. другие могут нюансов такого блока не знать, что ухудшит и читаемость и поддерживаемость кода. Ваше мнение? 


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
KSURi
Дата 22.4.2008, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



Цитата(ginnie @  22.4.2008,  19:53 Найти цитируемый пост)
ухудшит и читаемость и поддерживаемость кода

Если поддерживающий программист не понимает таких простых вещей, и если вы так о нем печетесь... Наверное тогда следует заменить все last unless $var на last if !$var (и сделать еще кучу ужасных unperlish things), а то вдруг он не поймет)


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
sir_nuf_nuf
Дата 22.4.2008, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



Прикалываетесь ?

а иногда такие идеи продвигают на серьезном уровне - тех директор.

Идеи просты:
croak + eval  => throw + catch
do if something => if (something) { do }
ну а про блоки и ласты =) вообще не говорим .


причина ? - удобочитаемость. потому что с этим кодом _прийдется работать_ людям которые не знаю этих фич или не привыкли.

таким вот образом ограничивают выразительность перла до уровня жавы..

как к такому относиться ?  придерживаться своих идеи или подчиниться мейнстриму ? 


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
KSURi
Дата 23.4.2008, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



sir_nuf_nuf, вот именно. Вы написали ключевую фразу про "выразительность жавы".
Я не понимаю, зачем выбирать перл, если писать в итоге на "жаве".


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
tolkien
Дата 23.4.2008, 03:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: 4
Всего: 4



А если приходится работать с несколькими языками. Например с PERL, PHP, C++. То в этом случаи лучше использовать похожие конструкции. Т.к это будет однотипно то код получается более читаемым и вероятность совершить ошибку будет минимальна.

Например я фигурные скобки пишу каждый раз с новой строки. Как это делал в С++
for(;;)
{
}
Стал это делать после того как прочел несколько книг по С++ авторитетных авторов. В которой они писали как правильно писать читаемый код. Весь смысл их советов и прочего сводился к одному. Делать код проще и стандартнее. Для одних и тех же операций выполнять  одни и те же действия. После С++ c Perl мне было очень тяжко. Т.к это менее строгий язык и выполнить здесь одно и тоже можно множеством способов. Например после С++ с PHP было очень легко. Т.к он по своей логике очень похож на С++. 

В Perl мне ненравится вот такая конструкция. Получается очень уродливо.
if()
{
   operator1;
} 
else
{
   operator2;
}
Но заменить я ее ни чем не могу. Например такая конструкция не везде работает корректно 
() ? operator1 : operator2;

А писать так
if () {
}else{
}
Я не могу. Т.к пропадает однотипность. 

Это сообщение отредактировал(а) tolkien - 23.4.2008, 03:05
PM MAIL   Вверх
sir_nuf_nuf
Дата 23.4.2008, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



а мне вот кажется, что перловая идея о том, что РАЗНОЕ должно выглядеть ПО РАЗНОМУ правильная..


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
Bulat
Дата 23.4.2008, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Странно, вообще-то на мой взгляд нужно отталкиватся от парадигм самого программирования и его концепций в независимости от языка. А прибегать к специфичному синтаксису языка лишь в том случае когда это действительно необходимо и оправдывает себя. Или проще говоря, на мой взгляд, глупо каждый раз впихивать в одну строку набор функций и действий, лишь потому что это позволяет делать перл.


Цитата(tolkien @  23.4.2008,  03:02 Найти цитируемый пост)
Например я фигурные скобки пишу каждый раз с новой строки. Как это делал в С++
for(;;)
{
}
Стал это делать после того как прочел несколько книг по С++ авторитетных авторов. В которой они писали как правильно писать читаемый код. Весь смысл их советов и прочего сводился к одному. Делать код проще и стандартнее. Для одних и тех же операций выполнять  одни и те же действия. После С++ c Perl мне было очень тяжко. Т.к это менее строгий язык и выполнить здесь одно и тоже можно множеством способов. Например после С++ с PHP было очень легко. Т.к он по своей логике очень похож на С++. 

В Perl мне ненравится вот такая конструкция. Получается очень уродливо.
if()
{
   operator1;
} 
else
{
   operator2;
}
Но заменить я ее ни чем не могу. Например такая конструкция не везде работает корректно 
() ? operator1 : operator2;

А писать так
if () {
}else{
}
Я не могу. Т.к пропадает однотипность. 


Странно, мне наоборот гораздо удобнее открывающуюся фигурную скобку писать в конце будь то if'a, for'a или названии процедуры. Тем самым при прочтении кода я понимаю, что этот блок(все что внутри фигурных скобок) относится именно к данному ифу. Кому как удобно, но когда мы пишем на русском языке, то при переходе на новую строку, все знаки припинания пишутся на предыдущей строке, а не на новой, даже если это тире или запятая. smile

Но при этом, чтобы догнать, что

print "Hello\n" if 1;

аналогичен 

if(1) {
  print "Hello\n";
}

или тому же 

if(1) 
{
  print "Hello\n";
}

не нужно быть знатоком каких-то особых фич. Достаточно повнимательнее почитать тот же учебник по перлу обучающий якобы за 24 часа smile


Это сообщение отредактировал(а) Bulat - 23.4.2008, 09:59


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
tishaishii
Дата 23.4.2008, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: 4
Всего: 8



Используй python, зачем тогда Perl? Perl разработан для удобства решения мелких задач и крупных. На полную ясность благодаря синтаксису не претендует. Претендует Python.

Это сообщение отредактировал(а) tishaishii - 23.4.2008, 11:00
PM MAIL ICQ Skype   Вверх
tolkien
Дата 23.4.2008, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: 4
Всего: 4



Цитата(tishaishii @ 23.4.2008,  10:58)
Используй python, зачем тогда Perl? Perl разработан для удобства решения мелких задач и крупных. На полную ясность благодаря синтаксису не претендует. Претендует Python.

Средние задачи ему уже не по силам? ))
PM MAIL   Вверх
KSURi
Дата 23.4.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



Цитата(Bulat @  23.4.2008,  09:59 Найти цитируемый пост)
не нужно быть знатоком каких-то особых фич

Изначально вопрос стоял об использовании блоков. Для их использования тоже не надо быть знатоком фич.
Особенностей всего две: свой lexical scope (хотя это даже сложно назвать _особенностью_) и идентичность однократно выполняемому циклу. Т.е. для работы с блоками достаточно прочитать perldoc -f my и perldoc -f last.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
tishaishii
Дата 23.4.2008, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: 4
Всего: 8



Я так понял, вопрос стоял про читабельность кода и о том, как можно сделать так, чтобы другой человек легко разобрался в нём. Вот python заявляет свой синтаксис таким образом. С Perl гораздо сложнее.
PM MAIL ICQ Skype   Вверх
Bulat
Дата 23.4.2008, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Цитата(tishaishii @  23.4.2008,  13:40 Найти цитируемый пост)
Я так понял, вопрос стоял про читабельность кода и о том, как можно сделать так, чтобы другой человек легко разобрался в нём. 


Писать код, отталкиваясь от логики, а не от синтаксических или иных возможностей языка. smile




Даже в той же яве, можно найти кучу примеров, когда нет необходимости в использовании блоков try-catch, хотя можно было бы. И тем более глупо все писать в перле через eval {} , если в этом нет существенной необходимости smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0540 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.