IT в России и мире в реалиях мирового кризиса

1,401,241 8,469
 

Фильтр
Oleg K.
 
russia
Москва
39 лет
Слушатель
Карма: +14.49
Регистрация: 28.12.2011
Сообщений: 1,378
Читатели: 1
Цитата: Superwad от 02.03.2016 15:32:33
Вот разобрать, где какая скобка что закрывает - весь попандос - логическая ошибка вам гарантирована!!! вот из- за этого и не могут написать НАДЕЖНУЮ систему. В Паскае это все красиво видно:
For i=1 to 4 Do Begin
                          For j=... Do Begin
                                             For k=... Do Begin
                                                                 If   Then Begin
                                                                                                a[i,j,k]:=...;
                                                                                                End
                                                                                        Else Begin
                                                                                                // при необходимости
                                                                                                end;     
                                                                  End;
                                             End;
                          End;
Вот пример грамотного кода - тут РЕАЛЬНО все видно для человека, который ОТЛАЖИВАЕТ код ( а это 70 % всех временных затрат). Набивается в Delphi или Lazarus за считанные минуты. А если программер высочайшего уровня, то не брезгует ставить комменты по ходу кода). Я так пишу свои программы. Потом найти через некоторое время, что имел ввиду - очень быстро и экономишь кучу времени, в Си такое - нереально, в силу того, что восстановить сходу полную логику кода невозможно.


О чем вы спорите? При нормальной разработке за 4-хкратную и более вложенность блоков (try, for, if и т.п.) грозят пальчиком (например, вот ссылка на стандартную проверку).
На любом языке можно написать и понятно, и ужасно. Не в языке дело, а в программисте. В 99% случаев это так.
  • +0.04 / 4
  • АУ
Lapsha
 
Слушатель
Карма: -2.16
Регистрация: 10.01.2016
Сообщений: 356
Читатели: 0
Цитата: Демонический кот от 02.03.2016 16:16:54Для читабельностиШокированный? Смеетесь что-ли...
В ЯВУ (языках высокого уровня) использование goto вообще недопустимо.
Вы нарушаете таким образом работу логики блоков программы, что ведет как минимум к неправильному распределению памяти.


Однако goto в Java хоть пока и не используется, но зарезервировано. Для возможного использования в будущем?


http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html

Все эти споры про goto и прочее не имеют смысла. Вкусовщина, не более. Важна только квалификация кодера.
Как и в любом деле, впрочем.
Если антропос пишет офигительно эффективный и устойчивый код с goto, то я бы предпочел работать именно с ним, а не с перфекционистом с аллергией к goto и с посредственными способностями.
  • +0.01 / 1
  • АУ
slavae
 
russia
Москва
Слушатель
Карма: +193.86
Регистрация: 21.03.2013
Сообщений: 27,830
Читатели: 7
Цитата: Jack Doe от 02.03.2016 16:31:12
  • для перехода к эпилогу функции (когда вместо return мы делаем goto QUIT; а в точке выхода у нас есть несколько строк деинициализации)




В Delphi для этого используется try finally. Если в блоке try вписать exit, то он перебрасывает не на выход процедуры, а на finally.
Империя - это мир, и этой идеологии достаточно. Мы живём в самой лучшей стране в мире и все нам завидуют.
Одушевлённое Одевают, Неодушевлённое Надевают.
  • +0.02 / 2
  • АУ
slavae
 
russia
Москва
Слушатель
Карма: +193.86
Регистрация: 21.03.2013
Сообщений: 27,830
Читатели: 7
Цитата: adolfus от 02.03.2016 00:05:07У меня ноут Dell xps15z. Ничем кроме как его родным источником не запитывается. И разъем подходит и полярность и напряжение и ток, но ноут все это игнорит и молчит. Прямо мистика какая-то.

http://notebook1.ru/…51&t=33884

в БП на центральный контакт стоит микроконтроллер, который по опросу мамки посылает код, обмануть ноут подсунув другое БП не получится...
Империя - это мир, и этой идеологии достаточно. Мы живём в самой лучшей стране в мире и все нам завидуют.
Одушевлённое Одевают, Неодушевлённое Надевают.
  • +0.02 / 2
  • АУ
Демонический кот
 
ussr
Слушатель
Карма: +4.80
Регистрация: 22.10.2014
Сообщений: 460
Читатели: 0
Цитата: Lapsha от 02.03.2016 19:12:54Однако goto в Java хоть пока и не используется, но зарезервировано. Для возможного использования в будущем?


http://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html

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

Не соглашусь. Ко вкусу данный вопрос не имеет отношения.
Использование goto в ЯВУ может говорить только об одном, об отсутствии логической схемы программы.
Когда программа пишется на ходу, без предварительного проектирования всей причинно-логической схемы и изучения предметной области.
О каком либо эффективном коде здесь вообще говорить странно.

P.S. Куда катится этот мир, люди всерьез доказывают "эффективность" использования goto в ЯВУ....ужос
Отредактировано: Демонический кот - 02 мар 2016 23:06:25
  • +0.03 / 2
  • АУ
Lapsha
 
Слушатель
Карма: -2.16
Регистрация: 10.01.2016
Сообщений: 356
Читатели: 0
Цитата: Демонический кот от 02.03.2016 20:00:54Не соглашусь. Ко вкусу данный вопрос не имеет отношения.
Использование goto в ЯВУ может говорить только об одном, об отсутствии логической схемы программы.
Когда программа пишется на ходу, без предварительного проектирования всей причинно-логической схемы и изучения предметной области.
О каком либо эффективном коде здесь вообще говорить странно.

P.S. Куда катится этот мир, люди всерьез доказывают "эффективность" использования goto в ЯВУ....ужос


Хотелось бы взглянуть на реальное воплощение образцово-показательной "логической схемы программы". Вкупе с прочими проговариваемыми страшными словами.

На примере реального промышленного программирования. А не писания морд к базам данных или стандартного фомолепительства с примитивной (или максимум - несложной) реализацией CGI на сервере.
Т.е. на примере, включающем миллион поправок и переделывания кода и пр. Который не будет идеальным просто никогда, на любом этапе создания проекта или его апдейтов.

Эти показные неприятия goto (да и по любому подобному поводу) - примерно то же, что и сцена с рестораном в фильме "О чем говорят мужчины". Работают простые и надежные решения. Это - опыт. Глобальный. И если goto будет простейшим решением вкупе с надежностью - должен быть goto.

Фуфайка, ватные штаны и валенки гораздо лучше в тайге, чем высокотехнологичная одежда с электроподогревом под управлением чипов.
  • +0.02 / 2
  • АУ
Lapsha
 
Слушатель
Карма: -2.16
Регистрация: 10.01.2016
Сообщений: 356
Читатели: 0
Цитата: Alexxey от 02.03.2016 20:03:51Смысл try finally в другом. Эта конструкция гарантирует выполнение кода в блоке finally в любом случае, как бы там не сложились дела в блоке try. Например, освободить память даже в случае возникновения исключения в try. Часто применяется как try except finally, для обработки исключения. Никаким goto такую конструкцию не заменить.


В Java есть реализация goto, только неявная:


for(bullshit1...) {
    for(bullshit2...) {
        blah-blah...
        break label1;
    }
}
blah-blah...

label1:
blah-blah...

Примерно то же самое и с continue.
Отредактировано: Lapsha - 02 мар 2016 23:33:40
  • +0.00 / 0
  • АУ
Lapsha
 
Слушатель
Карма: -2.16
Регистрация: 10.01.2016
Сообщений: 356
Читатели: 0
Цитата: slavae от 02.03.2016 20:30:48goto это костыль при программировании на языке высокого уровня. Всё.
Однажды использующий его теряет в голове схему переходов, и получается не программа, а каша.
Впрочем, настаивать не собираюсь. Я просто высказал своё отношение к таким специалистам.

goto это простое, лёгкое для понимания неправильное решение.


Другими словами, примеров реального промышленного кода с "продуманными механизмами чего-то там" не будет.


Это - результат.
А растекание меслью по древу как оно там должно быть идеально устроено - салонные разговоры.
  • +0.00 / 3
  • АУ
Lapsha
 
Слушатель
Карма: -2.16
Регистрация: 10.01.2016
Сообщений: 356
Читатели: 0
Цитата: Alexxey от 02.03.2016 21:01:46Да где её только нет. И что? Однако try finally ни break ни continue не заменяют никак. И не надо, в java есть для этого свои.


Это чё было?...
  • +0.00 / 0
  • АУ
Lapsha
 
Слушатель
Карма: -2.16
Регистрация: 10.01.2016
Сообщений: 356
Читатели: 0
Цитата: Alexxey от 02.03.2016 21:17:00Ваше?




Yes, it is!

И чо? Главный-то вопос был именно этот: и чо?
Отредактировано: Lapsha - 03 мар 2016 00:21:06
  • +0.00 / 0
  • АУ
slavae
 
russia
Москва
Слушатель
Карма: +193.86
Регистрация: 21.03.2013
Сообщений: 27,830
Читатели: 7
Цитата: Lapsha от 02.03.2016 20:39:19Другими словами, примеров реального промышленного кода с "продуманными механизмами чего-то там" не будет.

Извините, но именно выдвинувший тезис должен обосновать его. Уверяете, что нужно - прошу, давайте, покажите где нужно.
Что ж это за код такой, предъявите, где без этой херни не обойтись.
Империя - это мир, и этой идеологии достаточно. Мы живём в самой лучшей стране в мире и все нам завидуют.
Одушевлённое Одевают, Неодушевлённое Надевают.
  • 0.00 / 2
  • АУ
Jack Doe
 
Слушатель
Карма: +0.28
Регистрация: 16.04.2014
Сообщений: 20
Читатели: 0
try vs goto
Дискуссия   215 2
Ключевая особенность try/catch/finally - это сохранение контекста перед вызовом на стек, и очистка его в finally или восстановление в catch. Под  контекстом понимается содержимое всех регистров, включая счётчик команд (точно так же, как делается при переключении процессов в ОС). Без этого нельзя сделать откат при ошибке. Соответственно, try - дорогая операция.

Аналог try/catch в С - setjmp/longjmp.

Да, пользоваться try вместо goto можно, но дорого. В языках типа java/c# желательно известные типы ошибок обрабатывать обычной проверкой, вместо try. Ну и соответственно ненужные try - хороший задел по оптимизации)
  • +0.02 / 2
  • АУ
Alexxey
 
Слушатель
Карма: +47.85
Регистрация: 12.02.2009
Сообщений: 6,364
Читатели: 3
Цитата: Jack Doe от 02.03.2016 21:37:30Да, пользоваться try вместо goto можно, но дорого.

Именно. А наоборот и вовсе невозможно.
  • +0.00 / 0
  • АУ
Lapsha
 
Слушатель
Карма: -2.16
Регистрация: 10.01.2016
Сообщений: 356
Читатели: 0
Цитата: Alexxey от 02.03.2016 21:33:49Переадресую его Вам.
Каким таким образом наличие аналогов goto в Java отвечает на основной посыл моего поста выше: "никакими goto конструкцию try finally не заменить"?


А, вот в чем дело!


Тут случилась путаница: я отвечал не Вам, а на предыдущий пост о недопустимости goto в Java.
Поэтому слегка охренел от наезда с этим try/finally.
  • +0.00 / 0
  • АУ
Lapsha
 
Слушатель
Карма: -2.16
Регистрация: 10.01.2016
Сообщений: 356
Читатели: 0
Цитата: slavae от 02.03.2016 21:21:16Извините, но именно выдвинувший тезис должен обосновать его. Уверяете, что нужно - прошу, давайте, покажите где нужно.
Что ж это за код такой, предъявите, где без этой херни не обойтись.


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

В Java реализованы безусловные переходы. Значит, его создатели видели в этом смысл.

Примеры такого кода я привел выше. Быстрый и беспроблемный выстрел из многослойного цикла. Да, можно извратиться и по-другому. Но так проще и надежнее.
  • +0.01 / 1
  • АУ
adolfus
 
Слушатель
Карма: +18.97
Регистрация: 12.02.2010
Сообщений: 12,011
Читатели: 2
Цитата: Superwad от 02.03.2016 15:32:33
Вот разобрать, где какая скобка что закрывает - весь попандос - логическая ошибка вам гарантирована!!!


А какая разница,какая что закрывает, если они подряд идут. Самое главное -- узнаваемый визуальный ряд. Вас же не парит, что параметры из списка параметров функции в стек уходят справа налево, так и тут И с интаксической точки зрения открывающая скобка -- лишняя лексема. Когда это понимаешь, реально это начинает снаяала отвлекать, а потом и напрягать. Как в том анекдоте про профессра, бороду и одеяло.
 
  • +0.00 / 0
  • АУ
adolfus
 
Слушатель
Карма: +18.97
Регистрация: 12.02.2010
Сообщений: 12,011
Читатели: 2
Цитата: Демонический кот от 02.03.2016 16:42:36Бросьте.
Нормальный код на СИ так же закрывается скобкой на отдельной строке с табуляцией.

Ладно, Это не более чем прикол. Автор идеи -- Брюс Баррингтон. Некоторые опускают скобки вокруг тела однострочного if(), некоторые однострочное тело втыкают вслед за ним, типа if(0 != rc) exit(rc); в одной строке. Я собираю закрывающие скобки, если их несколько, в одной строке строго по их табуляциям, но все однострочные и даже пустые тела обязательно беру в скобки. Плюс, каждую переменную объявляю в отдельной строке -- надо же где-то и экономить:-)
  • +0.00 / 0
  • АУ
adolfus
 
Слушатель
Карма: +18.97
Регистрация: 12.02.2010
Сообщений: 12,011
Читатели: 2
Цитата: Superwad от 02.03.2016 16:15:11Возможно, всё дело в очень хитром протоколе работы контроллера зарядки и ноута.

Похоже на то -- с делловской зарядкой работают все доступные и подходящие по разъему ноуты, а наоборот -- фиг. Склоняюсь к тому, что ноут опрашивает зарядку и если она тупит, не берет от нее питание.
  • +0.01 / 1
  • АУ
Lapsha
 
Слушатель
Карма: -2.16
Регистрация: 10.01.2016
Сообщений: 356
Читатели: 0


Второй вариант аборигены называют египетские скобки, поскольку похоже:




[movie=400,300]http://youtu.be/S1jSFCRIFgU[/movie]
Отредактировано: Lapsha - 03 мар 2016 03:36:45
  • +0.00 / 0
  • АУ
adolfus
 
Слушатель
Карма: +18.97
Регистрация: 12.02.2010
Сообщений: 12,011
Читатели: 2
Цитата: slavae от 02.03.2016 19:28:43В Delphi для этого используется try finally. Если в блоке try вписать exit, то он перебрасывает не на выход процедуры, а на finally.

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

void fooblia() {
   int rc;
   if (0 !=(rc = call_1())) {
     goto quit;
   }
   if (0 != (rc = call_2())) {

     goto quit;
   }
   ...
   if (0 != (rc = call_M())) {

     goto quit;
   }
   rc = call_N();
quit:
   check_rc(rc); // вызов обработчика ошибок
   return;
}

Ну что может быть проще, понятнее и красивее?
  • +0.01 / 1
  • АУ
Сейчас на ветке: 3, Модераторов: 0, Пользователей: 1, Гостей: 0, Ботов: 2
 
vladivanych