powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / "а был ли мальчик?"
25 сообщений из 47, страница 1 из 2
"а был ли мальчик?"
    #36792087
i'm_novice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
доброе время суток.

циклы. в программах без них никуда. их бывает очень много. часто циклы связаны с массивами.
но массивы бывают пустыми. стоит ли проверять на не пустоту массивы, прежде чем по ним бегать?
Код: plaintext
1.
2.
3.
if (есть_чо_в_массиве) {
  цикл_по_массиву
}
что и на сколько тяжелее компиляторам: условие или заход в пустой массив? если есть смысл
проверять, то что проверять лучше (быстрее): количество элементов, истинность, другое?

или глупости все это и компьютеры с компиляторами на сегодняшний день на столько клевые, что
это экономия на спичках?
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792106
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
От языка зависит. Но для большинства императивных заход в выражение for(..) выполняется всегда хотя-бы 1 раз независимо от результата предиката цикла.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792109
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

даже в случае
Код: plaintext
for (; 1 == 0 ;)
?
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792111
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваш код - безсмысленный.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792117
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonОт языка зависит. Но для большинства императивных заход в выражение for(..) выполняется всегда хотя-бы 1 раз независимо от результата предиката цикла.
эээ... в C, C++, Pascal, Python, Ruby и Common Lisp для for (i = 1; i < 1; ++i) не выполняется ни разу. C# и Java проверить не могу.
Вы о каких языках?
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792118
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k0rvinmaytonОт языка зависит. Но для большинства императивных заход в выражение for(..) выполняется всегда хотя-бы 1 раз независимо от результата предиката цикла.
эээ... в C, C++, Pascal, Python, Ruby и Common Lisp для for (i = 1; i < 1; ++i) не выполняется ни разу. C# и Java проверить не могу.
Вы о каких языках?
А почему вы меня ограничиваете? Я что, только константы умею использовать?
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792119
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

человек спрашивает, есть ли смысл писать (псевдокод)
Код: plaintext
1.
2.
3.
arr = [];
if (!arr.isEmpty) 
  for (i =  0 , n = arr.length; i < n; ++i) 
    // do smth
или можно сразу
Код: plaintext
1.
2.
arr = [];
for (i =  0 , n = arr.length; i < n; ++i) 
  // do smth
, потому как очевидно, что 0 < arr.length будет исполнено как 0 < 0 = false и соответственно выполнено тело цикла ни разу не будет. 0 == 1 - это из той же оперы, что и 0 < 0.

Вы же говорите, что в тело цикла заход все равно хотя бы 1 раз, но будет.

Что вы имеете в виду?
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792121
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отвечая самому себе и ТС могу сказать следующее: иногда смысл точно есть. Например, некоторый класс может инкапсулировать доступ к базе данных и предоставлять интерфейс коллекции/массива. В таком классе метод проверки наличия хотя бы одного элемента (а-ля isEmpty) может быть реализован намного оптимальнее, нежели return this.length == 0.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792124
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymmayton,Что вы имеете в виду?
Давай сейчас сидеть и вместе додумывать, что-же имел в виду создатель сабжа, написав:
Код: plaintext
1.
2.
3.
if (есть_чо_в_массиве) {
  цикл_по_массиву
}
?
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792125
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nym...некоторый класс может инкапсулировать доступ к базе данных и предоставлять интерфейс коллекции/массива...
Слабо то же самое, но в трёх-четырёх словах, но по-русски. :)
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792127
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А почему вы меня ограничиваете? Я что, только константы умею использовать?
чем я Вас ограничиваю и почему только константы? for (i = a; i < b; ++i) для любого a >= b
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792129
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge,

ленивая выгрузка из базы данных с доступом как к массиву а-ля getRange(0, 100) -> SELECT ... LIMIT 0, 100 или getLength() -> SELECT COUNT(*) ... или isEmpty() -> SELECT 1 ... LIMIT 1.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792130
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergean0nym...некоторый класс может инкапсулировать доступ к базе данных и предоставлять интерфейс коллекции/массива...
Слабо то же самое, но в трёх-четырёх словах, но по-русски. :)
LINQ, короче. :)
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792131
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте дождёмся ответа автора.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792132
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonan0nymmayton,Что вы имеете в виду?
Давай сейчас сидеть и вместе додумывать, что-же имел в виду создатель сабжа, написав:
Код: plaintext
1.
2.
3.
if (есть_чо_в_массиве) {
  цикл_по_массиву
}
?
Додумывать нечего. Ибо очевидно, что. Могу написать дословно что он имел в виду.

Код: plaintext
1.
2.
if ($array) 
  foreach ($array as $element) 
    // do smth
против
Код: plaintext
1.
foreach ($array as $element)
  // do smth
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792135
i'm_novice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
an0nym меня правильно понял.

на сколько минимально "сложным" должен (может) быть "интерфейс коллекции/массива", чтобы
возникла необходимость реализации более оптимальной проверки?

p.s. если я вас правильно понял...
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792144
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 anonym

Если второй вариант (Perl ? или PHP ?) не вызывает ошибки, то почему-бы и нет. Пускай использует. Но если копнуть глубже, есть такой шаблон.

Код: plaintext
1.
2.
3.
4.
int m= 0 ;
co [i= 0  to n- 1 ]
 if  (a[i] > m)
   <if (a[i] > m) m=a[i];>


Попробуй подумать в чём его смысл. Может быть вопрос автора на поверхности
кажется глупым, но он порождает массу других направлений и мыслей.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792150
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Код: plaintext
1.
2.
3.
4.
int m= 0 ;
co [i= 0  to n- 1 ]
 if  (a[i] > m)
   <if (a[i] > m) m=a[i];>

А теперь объясните, пожалуйста, что значит этот код, конструкция co, переменная m, где определена n определена и скобки <>.

Последний мой пример был на PHP, но подобный шаблон
Код: plaintext
1.
2.
if (array.isEmpty()) {
  foreach (array as element) 
    // do smth
встречается в большинстве ОО ЯП - от того что в некоторых ЯП метод isEmpty имеет другое название и foreach записывается как foreach (Type element in array) мой код понятности не теряет.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792154
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
i'm_novicean0nym меня правильно понял.

на сколько минимально "сложным" должен (может) быть "интерфейс коллекции/массива", чтобы
возникла необходимость реализации более оптимальной проверки?

p.s. если я вас правильно понял...
Если проверка isEmpty основана на getLength() (т. е. банально function isEmpty() { return this.getLength() == 0;}), то разницы от наличия доп. if практически нет. Если проверка isEmpty имеет не связанную с getLength() реализацию, затраты на исполнение getLength() могут быть несравнимо выше, чем isEmpty(). В таком случае if нужен.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792160
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первый оператор co - это аналог for, с той разницей что порождает параллельные процессы вместо итераций. Угловые скобочки - аналог критической секции.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792172
i'm_novice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonПервый оператор co - это аналог for, с той разницей что порождает параллельные процессы вместо итераций. Угловые скобочки - аналог критической секции.

я, к сожалению, не понимаю вас. скажите, пожалуйста, какую массу направлений и мыслей
порождает мой вопрос? на сколько глубоко это может завести? чем это грозит?
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792174
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оценка стоимости операций. В параллельном программировании такой пустяк как блокирующее чтение-установка переменной является дорогостоящей операцией.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792175
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПервый оператор co - это аналог for, с той разницей что порождает параллельные процессы вместо итераций. Угловые скобочки - аналог критической секции.
Если я правильно понял, то
Код: plaintext
1.
co [i= 0  to  9 ]
 i * i;
породит 10 процессов, каждый из которых посчитает квадрат соответствующего ему i. Возникает вопрос - неужели будет overhead в случае
Код: plaintext
co [i= 0  to - 1 ]
? (Я подразумеваю, что to обозначает восходящий интервал и 0 to -1 выльется в пустой интервал.)
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792179
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

если я правильно понял, то вы говорите чисто о синтаксической стороне вопроса (что co [i=0 to -1] может быть рассмотрено как co [i=-1 to 0], что будет ошибкой - в 99% случаев программист этого не ждал), а я скорее о том, почему проверка на пустоту массива может быть намного рациональнее попытки пройтись по нему.
...
Рейтинг: 0 / 0
"а был ли мальчик?"
    #36792183
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример я взял из книги Грегори Эндрюса - Основы Многопоточного .... бла-бла и.т.д.

Сранно. Я думал вы будете спрашивать о двойной проверке a[i]>m. Но всех почему-то заинтересовал пакетный запуск процессов.

Чудеса!!

Ладно. Всем - до завтра.
...
Рейтинг: 0 / 0
25 сообщений из 47, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / "а был ли мальчик?"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]