HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 25.12.2009, 02:50
Kaimi
Познавший АНТИЧАТ
Регистрация: 23.08.2007
Сообщений: 1,237
Провел на форуме:
18127311

Репутация: 1676


Отправить сообщение для Kaimi с помощью ICQ
По умолчанию

В перле goto как будто медленнее работает, чем, например, redo.
 
Ответить с цитированием

  #2  
Старый 25.12.2009, 03:08
nerezus
Флудер
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


Отправить сообщение для nerezus с помощью ICQ
По умолчанию

Цитата:
throw чего ?
А хз ) Синтаксиса не помню уже ) Но там переписать не сложно без goto с меньшими затратами =)
Не дотнетчик я - импровизировал )
 
Ответить с цитированием

  #3  
Старый 25.12.2009, 11:27
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме:
2050916

Репутация: 0


По умолчанию

Цитата:
Сообщение от nerezus  
Но там переписать не сложно без goto с меньшими затратами =)
Ну не знаю, мне например в голову не приходит как там переписать без goto с меньшими затратами
 
Ответить с цитированием

  #4  
Старый 25.12.2009, 12:39
Qwazar
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме:
10605912

Репутация: 4693


По умолчанию

Я бы вынес проверку одной матрицы на наличие нуля в отдельную функцию и делал бы return true если бы встретился хотя бы один ноль. А общий цикл оформил бы примерно так (псевдокод):

Код:
public boolean checkMatrix(Matrix m) {
 for(List list: m) {
  if(!checkForZeroValue(list))
    return false;
 }
 return true;
}

private boolean checkForZeroValue(List list) {
 for(Item i: list)
    if(встретился_ноль) return true;

 return false;
}
Читабельность имхо выше, чем всякие разные метки искать. Ну а в целом, я иногда использую continue; но никогда не приходилось использовать goto.
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..

Мой блог:http://qwazar.ru/.

Последний раз редактировалось Qwazar; 25.12.2009 в 12:45..
 
Ответить с цитированием

  #5  
Старый 25.12.2009, 14:36
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме:
2050916

Репутация: 0


По умолчанию

Цитата:
Сообщение от Qwazar  
А общий цикл оформил бы примерно так (псевдокод):
Псевдокод это конечно хоршо и кошерно, но реальные программы пишутся не на псевдокоде.
Я же привожу конкретные примеры, в котором метка - самое простое и наглядное решение.
Цитата:
Сообщение от Qwazar  
Читабельность имхо выше, чем всякие разные метки искать. Ну а в целом, я иногда использую continue; но никогда не приходилось использовать goto.
Странно, у меня continue чуть ли не в каждом втором цикле.

Но в целом точка зрения ясна.
 
Ответить с цитированием

  #6  
Старый 25.12.2009, 18:03
Qwazar
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме:
10605912

Репутация: 4693


По умолчанию

Цитата:
Сообщение от Algol  
Псевдокод это конечно хоршо и кошерно, но реальные программы пишутся не на псевдокоде.
Я же привожу конкретные примеры, в котором метка - самое простое и наглядное решение.
Моё решение более наглядно, не запутаешься во вложенных циклах, и не придётся смотреть по коду, где находится метка, на которую ты скачешь. Да и псевдокод очень даже приближен к реальности
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..

Мой блог:http://qwazar.ru/.
 
Ответить с цитированием

  #7  
Старый 25.12.2009, 12:52
Sn@k3
Познавший АНТИЧАТ
Регистрация: 13.04.2006
Сообщений: 1,738
Провел на форуме:
5151669

Репутация: 1198


Отправить сообщение для Sn@k3 с помощью ICQ
По умолчанию

Цитата:
Сообщение от Algol  
Недавно один мой знакомый был повергнут в шок, увидев в моем коде оператор goto. Попытки объяснить что не все так плохо не были восприняты
Нынче в институтах учат, что применение goto - не кошерно, не тру и ваще отстой. Применение goto считается преступлением перед мировой общественностью.
Жаль только, что ВУЗы не учат тому, что каждому овощу - свое блюдо.
Ни в коей мере не преувеличивая важность goto, приведу все же два примера, в которых решение без goto было бы некрасиво и сложнее для восприятия:
C#
Код:
        /// <summary>
        /// Функция проверяет, что во всех матрицах есть хотя бы один нуль
        /// </summary>
        /// <param name="listOfMatrix"></param>
        /// <returns></returns>
        public bool HasZero(List<int[,]> listOfMatrix)
        {
            foreach (int[,] matrix in listOfMatrix)
            {
                for (int i = 0; i < matrix.GetLength(0); i++)
                for (int j = 0; j < matrix.GetLength(1); j++)
                    if(matrix[i, j] == 0)
                        goto nextMatrix;//<-----

                return false;
            nextMatrix: ;
            }

            return true;
        }
C#
Код:
        /// <summary>
        /// Создание tcp-сокета, с несколькими попытками подключения
        /// </summary>
        /// <param name="host"></param>
        /// <returns></returns>
        public TcpClient Connect(IPEndPoint host)
        {
            TcpClient client = new TcpClient();

            int maxTryCount = 5;
        tryAgain:
            try
            {
                maxTryCount--;
                client.Connect(host);
                return client;
            }
            catch (SocketException)
            {
                if(maxTryCount>0)
                    goto tryAgain;//<-----
                else
                    throw;
            }
        }
помню-помню когда-то в школе использовал его) но это была только одна задача) а прошло уже много лет)
п.с. о вкусах не спорят) если тебе так удобнее почемубы и нет) в бою все средства...
 
Ответить с цитированием

  #8  
Старый 25.12.2009, 12:58
Qwazar
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
Провел на форуме:
10605912

Репутация: 4693


По умолчанию

Цитата:
Сообщение от Sn@k3  
помню-помню когда-то в школе использовал его) но это была только одна задача) а прошло уже много лет)
п.с. о вкусах не спорят) если тебе так удобнее почемубы и нет) в бою все средства...
В данном случае о вкусах спорят, т.к.:
1) Этот код будет разбирать не только автор
2) Возможно даже через несколько лет.
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..

Мой блог:http://qwazar.ru/.
 
Ответить с цитированием

  #9  
Старый 25.12.2009, 18:37
.Slip
Leaders of Antichat - Level 4
Регистрация: 16.01.2006
Сообщений: 1,966
Провел на форуме:
21768337

Репутация: 3486


По умолчанию

Цитата:
Сообщение от Algol  
Недавно один мой знакомый был повергнут в шок, увидев в моем коде оператор goto.
Увидев первый сурс я тоже был повергнут в шок
__________________
..
 
Ответить с цитированием

  #10  
Старый 25.12.2009, 23:06
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
Провел на форуме:
2050916

Репутация: 0


По умолчанию

Цитата:
Сообщение от .Slip  
Увидев первый сурс я тоже был повергнут в шок
Ээ... Ну это понятно, а что-то по обсуждаемой теме есть
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Bat Micr0b Windows 2 25.04.2006 19:49



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ