Thursday, March 17, 2011

Снова про code style...

Еще раз хочу про стиль кода написать. Замучился доказывать, что писать надо в едином стиле. Вот если кино начинается комедией, а заканчивается детективом, все плюются… Если в часть главы в книге написано от первого лица, а потом резко так, без перехода от третьего – странно все это выглядит. Возникает вопрос что курил автор. А если код так писать, почему-то нормально.
Второй вопрос – заглавные буквы. Заглавная буква это начало мысли, начало чего-то большого, обозначение идеи. Название городов пишут с большой буквы, имена людей и т.д. Но если взять и Просто так начать Писать часть слов Не понятно зачем писать с Большой буквы, то читать это сложно. Ну и про автора такого текста мысли какие-то бродят.. Так почему нужно писать имена переменных именно так:
  private int MyTempVar;
Почему с большой буквы-то? Имя метода (имя человека, города) – это понятно. А тут-то зачем? И читать такой код сложно, хотя можно конечно.
Вообще загадочно, почему то что в обычной жизни никто не делает, в программировании считается нормальным и до хрипоты спорят что можно и так.

Friday, March 4, 2011

Диалоги

Индус (и) разговаривает с боссом (б) в европейской фирме:
б: Is it done?
и: Yes, but not yet.

б: so did you have chance to complete it?
и: yes
б: could you please send it to me
и: I will send it to you tomorrow after it will be finally completed

- Дим, ты все сделал по этой задаче?
- Да, все
- Совсем все или еще что-то осталось?
- Ну тут еще немного...

События


События (event) это почти делегаты, только используется ключевое слово event, что позволяет редактору Visual Studio правильно распределять их по закладкам окна свойств.

Описание класса, использующего события:
namespace EventTest
{
    /// <summary>
    /// Тип метода
    /// </summary>
    public delegate void Progress(int progress);

    public class Parser
    {
        /// <summary>
        /// Описываем событие
        /// </summary>
        public event Progress ProgressHandler;

        /// <summary>
        /// Основной метод
        /// </summary>
        public void Calc()
        {
            for (int i = 0; i < 100; i++)
            {
                // Если обработчик задан - вызываем его
                if (ProgressHandler != null)
                    ProgressHandler(i+1);
            }
        }
    }
}

Использование этого класса:
namespace EventTest
{
    class Program
    {
        static void Main(string[] args)
        {
            // Создаем экземпляр
            Parser parser = new Parser();
            // Вешаем обработчик
            parser.ProgressHandler += new Progress(parser_ProgressHandler);
            // Можно и два метода обработки одного события
            parser.ProgressHandler+=new Progress(parser_ProgressHandlerSecond);
            // Можно описывать обработчики "по месту", хотя это не всегда удобно
            parser.ProgressHandler+= delegate(int progress)
            {
                Console.WriteLine("inline:" + progress);
            };

            // Вызываем метод
            parser.Calc();
        }

        /// <summary>
        /// Этот метод будет вызываться при обработке события
        /// </summary>
        static void parser_ProgressHandler(int progress)
        {
            Console.WriteLine("first:" + progress);
        }

        /// <summary>
        /// Можно вешать и два метода
        /// </summary>
        static void parser_ProgressHandlerSecond(int progress)
        {
            Console.WriteLine("second:" + progress);
        }
    }
}