Re[6]: [Python] Зачем нужен else в for?
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 27.07.10 14:27
Оценка: +1
Здравствуйте, neFormal, Вы писали:

F>если не знать, то случится нечто непоправимое?. фича есть, кушать не просит..


Лишний член --- жопе непонятка. Ну и синтаксис у этой фичи какой-то неубедительный, не на 100% понятный интуитивно.
Re[4]: [Python] Зачем нужен else в for?
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.07.10 14:33
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, VladD2, Вы писали:


VD>>А самих "use cases for else" там нигде не приводится? А то у меня складывается ровно противоположенное мнение о них. Сдается мне, что как раз они редки и без них не так уж и неуклюже.


CS>
CS>for( var ... in ...) ... otherwise ...;
CS>

CS>(в моем случае) имеет смысл именно для случая for( var ... in ...) что есть перебор последовтельности с пом. итераторов/генераторов — т.е. когда длина последовательности неизвестна заранее.
CS>Для переборов реальных коллекций как правило есть достаточно дешевые способы сказать нечто типа этого:
CS>
CS>if( arr.length )
CS>  for ( var el in arr ) ...
CS>else
CS>  ...; 
CS>


Я вижу ты тоже не знаешь как работает for/else в питоне. Питоновская версия for/else-а аналогична вот такому коду:

isBreakerd = false;

for el in arr:
  ...
  if something:
    isBreakerd = true;
    break
  ...
    
if isBreakerd: ... # выполняем else-действия


А то что демонстрируешь ты к питону не имеет никакого отношения.
Меня же интересует именно питоновское поведение (которое мне каежся не интуитивным).

CS>Заведение счетчиков-флагов:

CS>
CS>  var count = 0;
CS>  for ( var el in arr )
CS>  {
CS>    ++count; 
CS>    ...
CS>  }
CS>  if(!count)
CS>    ...
CS>

CS>не так эффективно да и некрасиво.

Ага. И к делу не имеет никакого отношения .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: [Python] Зачем нужен else в for?
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.07.10 14:43
Оценка:
Здравствуйте, Temoto, Вы писали:

T>Если бы я был дизайнером языка, то сделал бы else как в шаблонизаторе, для случая пустого списка.


T>У тебя в Nemerle это ведь можно сделать макросом, правильно? Я не думаю, что о каждом мелком синтаксическом расширении знать надо всем.


Собственно я сюда и полез потому как в немерле это сделали макросом. Но по началу сделали по наитию, и получилось именно как в шаблонизаторе. Против этого я ничего не имел. Разве что не видел в этом реальной необходимости.

В комите было написано Add foreach..else macro. (<b>Same as for..else in Python</b>)..
Но потому пришел другой уважаемый товарищ и справедливо заметил
Автор: Иванков Дмитрий
Дата: 26.07.10
, что реализованное поведение не соответствует заявленному (т.е. тому что есть в Питоне). После чего автор макры сказал, что Доделать не сложно
Автор: _nn_
Дата: 26.07.10
.

Так вот у меня зародилось смутное сомнение в том, что это вообще надо. Мне все больше и больше кажется, что фича (по крайней мере в питоновском виде) совершенно надуманная, по крайней мере в контексте Немерла. Вот я и решил узнать мнение людей реально использующих Питон на практике.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: [Python] Зачем нужен else в for?
От: Temoto  
Дата: 27.07.10 14:44
Оценка: +2
VD>Я вижу ты тоже не знаешь как работает for/else в питоне. Питоновская версия for/else-а аналогична вот такому коду:

VD>
VD>isBreakerd = false;

VD>for el in arr:
VD>  ...
VD>  if something:
VD>    isBreakerd = true;
VD>    break
VD>  ...
    
VD>if isBreakerd: ... # выполняем else-действия
VD>


if not isBreakerd: ...
Re[7]: [Python] Зачем нужен else в for?
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 27.07.10 14:46
Оценка:
Здравствуйте, VladD2, Вы писали:

E>>Лично я не считаю, что она мешает в Питоне, но и в случае её исчезновения не сказать, что буду сильно страдать.


VD>Ага. Спасибо! Вот именно это мне и нужно было узнать.


E>>Так, иногда скучал бы... Всё-таки это одна из тех мелких необязательных фишек, которые делают процесс

E>>повседневного кодирования чуточку ярче

VD>К сожалению — это и одна и сторон которая делает язык чуточку сложнее для изучения. По сему это палка о двух концах.


Если честно, то в данном вопросе мне больше нравится методы литературного программирования. Вместо того, чтобы плодить разные конструкции (c целью избежать goto и/или лишней заморочки с флашами) и думать, как из обозвать, я могу записать примерно так

@ Общая схема чтения конфигурационного файла

@d config_file_error = goto config_file_error_label

@<Чтение конфигурационного файла@> =
  foreach item in Configuration file { Типа псевдокода }
    @<Обрабатываем строку конфигурационного файла@>

  @<Последние штрихи к обработке@>
  goto finalization;

  config_file_error_label:
    @<Обработка случая, когда в конфигурационном файле найдена ошибка@>
    goto finalization; 

  finalization:
    <@Финализируем обработку файла@>
    
@ Обработка одной строки конфигурационного файла

@<Обрабатываем строку конфигурационного файла@> =
  код...
Re[2]: [Python] Зачем нужен else в for?
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 27.07.10 14:57
Оценка:
Здравствуйте, eugals, Вы писали:

E>

I even wonder if else-clauses on for/while were a good idea. (The one
E>on try is definitely a good idea since the use case is quite frequent
E>and only clumsily handled otherwise; the use cases for else on
E>for/while are less convincing IMO.)


Все равно название не очень хорошее. Лучше тогда

  foreach a in B
    ...
  on break
    ...
Re[7]: [Python] Зачем нужен else в for?
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 27.07.10 15:33
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Так вот у меня зародилось смутное сомнение в том, что это вообще надо. Мне все больше и больше кажется, что фича (по крайней мере в питоновском виде) совершенно

надуманная, по крайней мере в контексте Немерла. Вот я и решил узнать мнение людей реально использующих Питон на практике.

Как по мне, общее развитие ситуации такое: много лет назад Дейкстра заклеймил goto. В результате структурное программирование без использования goto пошло в массы. Потом, однако, выяснилось, что несмотря на то, что любой код с использованием goto можно переписать без использования оного, но в ряде случае это приводит к лишнему геморрою и запутыванию в виде дубрирования кода или введения хитрых флажков. Поэтому началось медленное движение в направлении того, чтобы формализовать часто используемые goto в виде новых конструкций языка. Таким образом, вроде как и не goto Поэтому появились всякие break и continue, потом именованные циклы. Ну и вот сейчас очередной пример в Питоне, может и с не совсем удачным названием.

Если говорить обо мне, то код в перед break таки действительно часто дублируется, причем дело сводится буквально к одному-двум операторам. Для таких случаем вводить флаг нелепо, поэтому код просто дублируется. Так что, случаи, когда такая конструкция может быть удобной, есть (хотя я и не пишу усиленно на питоне).

Но если говорить о Nemerle, то было бы уместнее реализовать какой-то более общий случай.

Например, первое что пришло в голову:

  statemachine TestStatemachine entry MainForeach
  {
    var Common: int;

    situation MainForeach onexit NormalXXXHandling:
      foreach(x in XXX)
      {
        if (Something) goto LoopFailture("Something wrong");
        // ...
      }

    situation final NormalXXXHandling final:
      Console.Print("XXX has beenhandled!");

    situation final LoopFailture(Msg: string):
      Console.Print("something wrong! {1}", Msg);

    // А сюда можно добавить стандартные обработчики, например

    situation SituationChanged(S1, S2):
      Console.Print("State was switched {1} => {2}", S1, S2);

    situation final ExceptionOccured(E):
      Console.Print("Exception {1}", E.Msg);
      
  }

  // Сюда же интересно было бы добавить waitevent
Re[5]: [Python] Зачем нужен else в for?
От: c-smile Канада http://terrainformatica.com
Дата: 27.07.10 16:29
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я вижу ты тоже не знаешь как работает for/else в питоне. Питоновская версия for/else-а аналогична вот такому коду:


Да, я достоверно не знаю как работает for/else в Питоне.
Зато я знаю как for(in)otherwise будет работать в TIScript:
otherwise часть выполняется в том случае если тело цикла ни разу не исполнилось. И все.
Это я считаю концептуально более правильным и полезным. Никаких там break и прочая — все просто.

В питоне это сделано неправильно. Если у тебя есть break значит у тебя уже есть некий if внутри.
Вставить туда взведение флага — нет проблем.

VD>А то что демонстрируешь ты к питону не имеет никакого отношения.

VD>Меня же интересует именно питоновское поведение (которое мне каежся не интуитивным).

Я же тебе и отвечаю. Только на своем примере который мне кажется более интуитивным.
Re[8]: [Python] Зачем нужен else в for?
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.07.10 16:32
Оценка:
Здравствуйте, Mystic, Вы писали:

M>Но если говорить о Nemerle, то было бы уместнее реализовать какой-то более общий случай.


У немерла нет проблем с выходом из циклов и т.п. В нем есть конструкция "Именованный блок". Выгдядит это так:
namedBlock :
{
  foreach (x in xs)
    foreach (y in xs)
      foreach (z in xs)
      {
         ...
         when (cond)
            namedBlock(x + y + z);
      }
}

И даже эта возможность напрямую почти не используется почему-то.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: [Python] Зачем нужен else в for?
От: neFormal Россия  
Дата: 27.07.10 17:57
Оценка:
Здравствуйте, Mystic, Вы писали:

F>>если не знать, то случится нечто непоправимое?. фича есть, кушать не просит..

M>Лишний член --- жопе непонятка. Ну и синтаксис у этой фичи какой-то неубедительный, не на 100% понятный интуитивно.

даже не знаю, чего тут неинтуитивного..
для x из X:
  сделать что то
иначе:
  сделать что то другое


редкоиспользуемая, но всё же удобная фича..
...coding for chaos...
Re[3]: [Python] Зачем нужен else в for?
От: neFormal Россия  
Дата: 27.07.10 17:58
Оценка:
Здравствуйте, Mystic, Вы писали:

E>>

I even wonder if else-clauses on for/while were a good idea. (The one
E>>on try is definitely a good idea since the use case is quite frequent
E>>and only clumsily handled otherwise; the use cases for else on
E>>for/while are less convincing IMO.)

M>Все равно название не очень хорошее. Лучше тогда
M>
M>  foreach a in B
M>    ...
M>  on break
M>    ...
M>


"on break", судя по названию, не идентичен по поведению "else" в питоне..
...coding for chaos...
Re[8]: [Python] Зачем нужен else в for?
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.07.10 21:07
Оценка: +1
Здравствуйте, neFormal, Вы писали:

F>даже не знаю, чего тут неинтуитивного..

F>
F>для x из X:
F>  сделать что то
F>иначе:
F>  сделать что то другое
F>


Ты в курсе, что "иначе:" выполняется всегда если только в теле цикла нет break?

Вся суть заключается в том, что это не "иначе", а "после успешного завершения".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: [Python] Зачем нужен else в for?
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.07.10 21:09
Оценка:
Здравствуйте, Mystic, Вы писали:

M>Все равно название не очень хорошее. Лучше тогда


M>
M>  foreach a in B
M>    ...
M>  on break
M>    ...
M>


Ага. Только не "on break", а "when not break" что ли. В общем, явная закладка на какой-то частный паттерн использования .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [Python] Зачем нужен else в for?
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.07.10 21:10
Оценка:
Здравствуйте, neFormal, Вы писали:

F>"on break", судя по названию, не идентичен по поведению "else" в питоне..


Именно что идентичен, только с точностью до наоборот "else" в Питоне == "если не прервали". Именно о нелогичности этого я и говорил.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: [Python] Зачем нужен else в for?
От: neFormal Россия  
Дата: 27.07.10 21:22
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ты в курсе, что "иначе:" выполняется всегда если только в теле цикла нет break?


ну да.. как бы я использую этот язык..

VD>Вся суть заключается в том, что это не "иначе", а "после успешного завершения".


если есть что перебирать:
  перебираем
иначе:
  пишем коммент на кывт
...coding for chaos...
Re[5]: [Python] Зачем нужен else в for?
От: neFormal Россия  
Дата: 27.07.10 21:27
Оценка:
Здравствуйте, VladD2, Вы писали:

F>>"on break", судя по названию, не идентичен по поведению "else" в питоне..

VD>Именно что идентичен, только с точностью до наоборот



VD>"else" в Питоне == "если не прервали". Именно о нелогичности этого я и говорил.


вариант "если прервали" тоже бы не особо то логичен был.. в таком варианте смысла даже нет.. как, впрочем, и во всём этом споре..
...coding for chaos...
Re[5]: [Python] Зачем нужен else в for?
От: FR  
Дата: 28.07.10 04:26
Оценка:
Здравствуйте, VladD2, Вы писали:

FR>>Вообще фича сделана антиинтуитивно, я вот всегда путаю что и когда вызывается


VD>В языке или в упоминаемом движке рендеренга?


В языке конечно, я этого движка не видел.


VD>Ясно. Спасибо. Именно это мне и было интересно. Просто "у нас" тоже хотят такое прекрутить, а мне как раз кажется, что такое поведение антиинтуитивно (с)


Тут такое дело мне например и многим другим это кажется пятой ногой, но есть люди которые с такой фичи почему-то сильно тащатся
В общем прикрутить можно, но ключевое слово else лучше заменить чем-то более внятным.
Re[5]: [Python] Зачем нужен else в for?
От: FR  
Дата: 28.07.10 04:42
Оценка: :)))
Здравствуйте, VladD2, Вы писали:

VD>Именно что идентичен, только с точностью до наоборот "else" в Питоне == "если не прервали". Именно о нелогичности этого я и говорил.


Предлагаю else переименовать в "ну на посошок"
Re[6]: [Python] Зачем нужен else в for?
От: c-smile Канада http://terrainformatica.com
Дата: 28.07.10 06:44
Оценка:
Здравствуйте, Temoto, Вы писали:

T>
if not isBreakerd: ...


Ну блин как серпом ...

Короче: break/broke/broken — такой вот неправильный глагол весь из себя.

А то что Влад пытался изобразить звучит как if not breakGotten ...

Звыняйте за оффтопик.
Re[6]: [Python] Зачем нужен else в for?
От: neFormal Россия  
Дата: 28.07.10 08:19
Оценка: :)
Здравствуйте, FR, Вы писали:

FR>Тут такое дело мне например и многим другим это кажется пятой ногой, но есть люди которые с такой фичи почему-то сильно тащатся


понимаешь, вот сидишь ты пишешь свой быдлокод, нужно тебе что-то.. и тут ВДРУГ!!1 это что-то оказывается уже реализованным в языке..
ты дописываешь кусок кода, откидываешься на спинку кресла, закуриваешь, и тебе хорошо-хорошо.. ^_^
...coding for chaos...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.