воскресенье, 14 марта 2010 г.
понедельник, 7 сентября 2009 г.
Локальные функции.
Иногда бывает так, что пишешь вот какую-то функцию (пусть функцию foo), и в процессе написания начинаешь осознавать что некий код в оной функции дублируется и что неплохо бы было его вынести в отдельную функцию (назовем её boo). Но выносить этот код в отдельную функцию-член класса плохо, т.к. по сути она больше никому не нужна, т.е. не имеет большого смысла вне функции foo. А замусоривать общее пространство имен своими личными потрохами не есть хорошо. Для борьбы с этим в паскаль-семействе языков (pascal, modula, modula-2, modula-3, oberon. oberon-2, component pascal, ada) существуют т.н. локальные процедуры и функции, т.е. функции которые объявляются прямо в самой родительской функции, видны соответственно только из нее и имеют, кстати, потенциально доступ ко всем локальным переменным родительской функции.
В С к сожалению такого удобного механизма нет. В С++ тоже нет, однако по наследству от Си ему досталась возможность объявлять новые типы внутри тела функции, в том числе и структуры и классы. А структура и класс в С++ это уже не просто набор полей/данных, но и набор функций-членов! Собственно чем мы грязно и воспользуемся:
void foo() {
struct
int a; // к этой переменной имеет доступ и функция boo
void boo(){cout << a;}
} local;
local.a = 15;
local.boo(); // вызов локальной функции
}
Т.о. мы получили фактически полный аналог локальных функций из паскаль-семейства.
Кроме всего прочего, локальные функции хороши тем что у них существенно ниже "порог написания" нежели у "глобальных" (т.е. видимых кем-то ещё). Т.е. программисту легче создать локальную функцию нежели продумывать как спроектировать и задокументировать функцию в общем неймспейсе. Да с одним придумыванием названия насколько проблем меньше! Следствием этого имеем: очень часто если программист не создает локальную функцию (не знает как это сделать, не позволяет язык) функциональность не будет разбиваться на более мелкие функции вообще т.о. будет присутствовать дублирующийся код, который в последствии будет весьма неприятно рефакторить. Локальные же функции в последствии легче отследить и, если одни и те же (или похожие) локальные функции повторяются во многих методах, то можно легко их вынести их функционал в самостоятельную функцию.
четверг, 3 сентября 2009 г.
Условие с запятой.
Придумалась интересная конструкция на С++ (думаю сия конструкция была конечно же изобретена задолго до меня, но я до нее додумался совсем недавно). Вместо вложенных ифов, всяких елсов, и т.п. можно использовать один единственный иф. Пример:
#include <iostream>
using namespace std;
void foo(int a)
{
if ( (0==a and (
cout << "a=zero",
cout << endl,
true ) )
or
(1==a and (
cout << "a=one",
cout << endl,
true) )
or
(2==a and (
cout << "a=two",
cout << endl,
true) ) );
}
int main()
{
foo(0);
foo(1);
foo(2);
foo(3);
foo(5);
return 0;
}
Думаю всем ясно что выведет программа, а если не ясно, то попробуйте её запустить ;-)
Таким образом, очевидно, что else, как впрочем и тело условного оператора по сути своей синтаксический сахар чистой воды. Вложенные if'ы -- тоже по сути синтаксический сахар.
Таким образом, очевидно, что else, как впрочем и тело условного оператора по сути своей синтаксический сахар чистой воды. Вложенные if'ы -- тоже по сути синтаксический сахар.
среда, 21 мая 2008 г.
воскресенье, 18 мая 2008 г.
Про OSS.
В связи с очевидным успехом опенсорс-разработки, страсти вокруг нее накаляются чем дальше тем больше. При этом оный опенсорс частенько становится чуть ли не религией, со всеми сопутствующими атрибутами (типа фанатиков новой веры). Как следствие превозглашается что сия модель разработки суть единственно верная, более того, она исключительная и ничего ранее и близко небыло. Но это не совсем так.
Чем замечатален опенсорс? Прежде всего тем что:
- Программа как таковая не имеет отдельной ценности, и соответственно распространяется (обычно) бесплатно. Ценность имеют конечные решения (грубо говоря, компутер + это ПО + конфигурирование всего этого под нужды заказчика).
- Если тебе в руки попал бинарник такой программы, то ты можешь получить и исходник её (а затем его спокойно изучать, менять и т.д. и т.п.).
Однако, если вспомнить "доперсоналочные" времена, то мы однако увидим что тогда ПО как таковое также не имело обособленной ценности (т.е. отдельно от аппаратного комплекса для которого предназначалось) и распространялось имено что в исходниках. Таким образом, всё возвращается на круги своя. А чем-то кардинально новым и необычным является, как ни странно, именно что коробочная проприентарщина. По всей видимости это было некое временное явление (по кр. мере для промышленных решений, за домашний десктоп сейчас говорить не буду, ибо это отдельная и довольно обширная тема.), которое сейчас вновь будет постепенно вытеснено классической схемой.
Да, а реально новым является развитие коммуникаций, разным компаниям совместно развивать нужное им ПО (т.е. то ПО которое они использует в своих решениях) не порождая форков.
понедельник, 8 января 2007 г.
SeaMonkey и отображение картинок.
Сегодня нашел то, что долго и безуспешно искал долгое время - аддон к SeaMonkey который позволяет работать с картинками точно так же как и в Опере. Т.е. можно выбрать режим загрузки и отображения картинок. Завется, сей чудный аддон, как и следовало ожидать ImgLikeOpera. Несмотря на то что писан он был для ФайрФокса, он нормально работает и в нашей симанке (см. примечание в конце). Устанавливается просто - тыкаем по ссылке, там тыкаем установить. Со всем соглашаемся и все. После перезагрузки симанки справа-внизу появится вот такое вот:

Где можно выбирать как именно отображать картинки на данной вкладке браузера.
Побочные эффекты - если загрузка картинок запрещена, то не будет работать чат в gmail'e (который через браузер работает конечно же).
Примечание: этот аддон нормально функционирует на вот такой версии SeaMonkey: Mozilla/5.0 (BeOS; U; BeOS BePC; en-US; rv:1.9a1) Gecko/20060224 SeaMonkey/1.5a. На более новой (осеннего выпуска) симанки установка этого аддона приводит к неприятному побочному явлению - перестают открываться новые табы. Вообще. В чем дело - пока не понятно.
Также опробовал этот аддон для последнего ФФ (что на бибитсах последний) - результат такой. 1) Без изменения установочного скрипта оно не устанавливается, ибо не проходит контроль версии браузера (последний у нас - 3.0, а аддон хочет 1.5 или 2.0). 2) В отличае от новой симанки, табы в этом ФФ открываются несмотря на аддон. 3) Но аддон как-то странно себя ведет. Не очень то адекватно реагирует на попытки выставить нужный режим отображения картинок (т.е. нужный - фиг выставишь).
Вывод - чтобы нормально пользоваться аддоном прямо сейчас, надо либо использовать ту версию симанки что стоит у меня, либо выяснять в чем проблема и крутить этот аддон в сторону совместимости.

Где можно выбирать как именно отображать картинки на данной вкладке браузера.
Побочные эффекты - если загрузка картинок запрещена, то не будет работать чат в gmail'e (который через браузер работает конечно же).
Примечание: этот аддон нормально функционирует на вот такой версии SeaMonkey: Mozilla/5.0 (BeOS; U; BeOS BePC; en-US; rv:1.9a1) Gecko/20060224 SeaMonkey/1.5a. На более новой (осеннего выпуска) симанки установка этого аддона приводит к неприятному побочному явлению - перестают открываться новые табы. Вообще. В чем дело - пока не понятно.
Также опробовал этот аддон для последнего ФФ (что на бибитсах последний) - результат такой. 1) Без изменения установочного скрипта оно не устанавливается, ибо не проходит контроль версии браузера (последний у нас - 3.0, а аддон хочет 1.5 или 2.0). 2) В отличае от новой симанки, табы в этом ФФ открываются несмотря на аддон. 3) Но аддон как-то странно себя ведет. Не очень то адекватно реагирует на попытки выставить нужный режим отображения картинок (т.е. нужный - фиг выставишь).
Вывод - чтобы нормально пользоваться аддоном прямо сейчас, надо либо использовать ту версию симанки что стоит у меня, либо выяснять в чем проблема и крутить этот аддон в сторону совместимости.
Подписаться на:
Сообщения (Atom)


