Можно задать выполнение нужных частей кода битовой маской или значением enum'а. Предполагаем, что в следующей итерации цикла мы выполним тело целиком (а с goto так и выйдет); в этом месте мой мозг начинает понемногу плавиться.
private enum dirtyCycleJumper {
fromFirst,
fromSecond
}
private void doSecondCycle(int from, int to, dirtyCycleJumper startFrom) {
int i;
for (i=from; i<to; i++) {
switch (startFrom) {
case fromFirst: doAnotherJob_1();
case fromSecond: doAnotherJob_2();
}
startFrom = dirtyCycleJumber.fromFirst;
}
return;
}
Вызываем doSecondCycle(3, 200, dirtyCycleJumper.fromSecond).
С такими требованиями, действительно, goto будет удобнее. Но случай какой-то уж больно маргинальный.
Надеюсь, я правильно понял семантику требования «прыгнуть в середину другого цикла».
private void doFirstCycle() {
int j;
for (j=0; j<100; j++) {
doYourJob();
if (this.haveToBreak) {
doSecondCycle(3, 200);
break;
}
}
return;
}
private void doSecondCycle(from, to) {
int i;
for (i=from; i<to; i++) {
doAnotherJob();
return;
}
В нужном месте той огромной нечитаемой функции, из одного из циклов которой нужно прыгать в середину другого, вместо цикла вставляете вызов функции. Заодно и читаемость повысится.
Да простят меня присутствующие, но я использую подсказанное преподавателем в ВУЗе мнемоническое правило.
Представьте себе, что графический символ диода — это птичка. С одной стороны у неё клюв (катод), а с противоположной… Правильно, анод!
Виноват, имелся в виду обратный ток перехода (я здесь говорю не про КМОП), при возрастании температуры генерируется больше свободных зарядов. У КМОП сопротивление канала при росте температуры растёт. Так что оставим диффузию примесей и указанное ниже неблагоприятное воздействие термоциклирования. Срок жизни полупроводника с ростом температуры падает — разумеется, влияние одного градуса разницы температур вы не заметите.
Очень просто. Ускоренная миграция примесей между частями полупроводника разных типов при повышении температуры. Плюс повышение токов утечки, что может привести к неопределённости состояния логического элемента. Плюс повышение вероятности теплового пробоя: повышение температуры приводит к повышению тока утечки, а он, в свою очередь, увеличивает тепловыделение. И — бабах!
Вызываем doSecondCycle(3, 200, dirtyCycleJumper.fromSecond).
С такими требованиями, действительно, goto будет удобнее. Но случай какой-то уж больно маргинальный.
В нужном месте той огромной нечитаемой функции, из одного из циклов которой нужно прыгать в середину другого, вместо цикла вставляете вызов функции. Заодно и читаемость повысится.
private void doFirstCycle() {
int j;
for (j=0; j
Представьте себе, что графический символ диода — это птичка. С одной стороны у неё клюв (катод), а с противоположной… Правильно, анод!