Tips & tricks (Трюки кодинга)
Давайте будем делиться в этом разделе различными хитростями и трюками программирования на MP.
Нестандартное использование оператора repeat Когда я только начинал кодить на MP меня очень тяготило отсутствие оператора switch, который есть в C. Поэтому, когда нужно было делать множество проверок, то выглядело это так: if ... then ... if ... then ... if ... then ... Некрасиво, правда? А если таких проверок не один десяток, а то и сотня? Основной недостаток такой конструкции - невозможность отменить дальнейшие проверки если результат уже найден. Тут бы мог спасти оператор goto, но его в MP тоже нет. Но решение этой проблемы есть. Посмотрите нижеприведенный код и вам всё станет ясно: repeat if ... then begin ....; break; end; if ... then begin ....; break; end; if ... then begin ....; break; end; until true; C помощью сочетания repeat until true и break можно добиться и некоего подобия оператора goto т.е. условного/безусловного перехода на метку. ..... ..... // Какой-то код ..... repeat ..... ..... // Код ..... if ... then break; // Переход на метку ..... ..... // Код ..... until true; ..... // Тут типа метка ..... |
Re: Tips & tricks (Трюки кодинга)
А если ни одно условие не выполнится?
Программа зависнет. |
Re: Tips & tricks (Трюки кодинга)
нет, из-за until true; цикл тока один раз пройдет...
|
Re: Tips & tricks (Трюки кодинга)
А elseif в MP нет?
|
Re: Tips & tricks (Трюки кодинга)
А что это за оператор? Такого помоему даже в TP нет.
|
Re: Tips & tricks (Трюки кодинга)
Цитата:
if .... then .... else if .... then .... else if .... then ....; Операторы div и mod Кстати, кто не знал, MP поддерживает операторы div и mod, хоть про них в хелпе ничего не сказано: mod - остаток от деления, пример: n := 19 mod 10; // Результат - число 9 div - целочисленное деление, пример: n := 19 div 10; // Результат - число 1 |
Re: Tips & tricks (Трюки кодинга)
odd
Так если есть esle if, можно с его помощью организовать переключатель. Хотя, конечно, в цикле удобней, так как break можно поставить именно там, где нужно. |
Re: Tips & tricks (Трюки кодинга)
Еще для тех кто не знал после if можно ставить два(или больше) условия(но тогда их нужно брать в скобки):
if (i=1) or (j=1) then [код] (программа выполняет [код] если выполняется либо одно из этих условий, или оба) if (i=1) xor (j=1) then [код] (программа выполняет [код] если выполняется ТОЛЬКО ОДНО из этих условий) if (i=1) and (j=1) then [код] (программа выполняет [код] если выполняется ОБА условия вместе) i,j - переменные числового типа Если хотим написать чтоб данное условие не выполнялось, используем логический оператор not: if not b then [код] это то же самое что: if b=false then [код] Где b - переменная типа boolean. Может вам это извесно, но новичкам полезно) |
Re: Tips & tricks (Трюки кодинга)
Ещё один пример использования оператора mod
Допустим, у вас в программе есть меню из 5 пунктов. В переменной cursor хранится текущее положение курсора. Тогда вы пишите: key:=GetKeyClicked; if (key=-60) or (key=-2) then cursor:=cursor+1; // Вниз if (key=-59) or (key=-1) then cursor:=cursor-1; // Вверх if cursor<0 then cursor:=5+cursor; if cursor>4 then cursor:=cursor-5; можно проще: key:=GetKeyClicked; if (key=-60) or (key=-2) then cursor:=(cursor+1) mod 5; // Вниз if (key=-59) or (key=-1) then cursor:=(cursor+4) mod 5; // Вверх и всё. |
Re: Tips & tricks (Трюки кодинга)
|
Re: Tips & tricks (Трюки кодинга)
Сорри за флуд, не читал того поста.
|
Re: Tips & tricks (Трюки кодинга)
http://homepage.ntlworld.com/config/...blecontrol.htm
думаю это тоже подойдет для данной темы |
Re: Tips & tricks (Трюки кодинга)
Цитата:
1. cursor:=(cursor+1) mod 5; 2. cursor:=cursor+1; if cursor>5 then cursor:=1; |
Re: Tips & tricks (Трюки кодинга)
На самом деле это легко проверить:
Код:
Program TestBool; 1 ПРИМЕР Эмулятор Siemens CX65 - 285мс Эмулятор WTK - 1204мс Эмулятор NHAL midp2exe - 219мс 2 ПРИМЕР Эмулятор Siemens CX65 - 310мс Эмулятор WTK - 1484мс Эмулятор NHAL midp2exe - 250мс Так что я был прав. Первый пример и короче и выполняется быстрее. |
Re: Tips & tricks (Трюки кодинга)
odd, не факт, надо на мобиле проверять,
раньше сравнивал, что быстрее abs или if на компе поедил один, на мобиле другой. |
Часовой пояс GMT +4, время: 14:44. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot