All streams
Search
Write a publication
Pull to refresh
4
0
Сергей @k0rsh

Пользователь

Send message
В таком случае, любезный, вы пропустили «у» после слова «только» в комментарии, касающемся sanitarium'а.

За сим позвольте откланяться.
Про советские санатории у Металлики даже одноименная песня есть! Видимо, её американцы и вспомнили.

Вот, кстати, да. Тоже не очень понятно в чем принципиальная необходимость возврата true и отдельно false.


return ( toleft || toright )

Чем не вариант?

В глаза бросается злоупотребление ключевым словом this — его имеет смысл применять тут в том случае, если в области видимости метода имя переменной совпадает с именем переменной в области видимости класса. Т.е.:

class MyClass
 {
    protected int num;

    public void NumMethod(int num)
    {
        this.num = num;
    }
}


Еще позволю себе совет: в именовании переменных и методов лучше сразу стараться себя приучить делать это dotnet way :) Никаких подчеркиваний в именах переменных/методов, за исключением приватных полей класса:

private ILogger _logger = null;
protected Stack<string> logMassiv = new Stack<string>();
protected int variableName = 0;

public void MyMetod(int variableOne, int variableTwo);

ну и т.д. :))
Сам процесс логирования осуществляется в отдельном потоке, который работает, если очередь не пустая.
Этот поток забирает записи из очереди, производит их вывод (например, в файл) и умирает, если записей больше нет.


Для таких целей можно попробовать постоянно живущий BackgroundWorker и блокировку очереди сообщений посредством ReaderWriterLock. А чтобы не убивать каждый раз процесс, можно построить на базе AutoResetEvent флажок, который поднимается при записи сообщения в очередь и поднятия которого ждет фоновый процесс через WaitOne().
Ну и, кстати, о логгере. Сдается мне, что передавать стек в метод write через ссылку strs и в этом же методе очищать его непосредственно как log_massiv.Clear() — это не очень правильная практика.

Кроме того, не мешало бы завернуть File.AppendAllLines в блок try/catch на всякий случай.
Знакомое тело сервера. У Metanit'а такой пример был, кажется, для консольного чата.
Но речь о другом.

Почему, например, не сделать блок через using?

protected void Sender(TcpClient client, byte[] data)
        {
            try
            {
                Logger.add("Sender OK");
                using(BinaryWriter writer = new BinaryWriter(client.GetStream()))
                {
                    writer.Write(data);
                    writer.Flush();
                }
            }
            catch (Exception e)
            {
                Logger.add(e.Message);
            }
        }


И еще вопрос — не увидел блокировок в логгере. Как он себя поведет, когда несколько потоков его дернут одновременно?

Кроме, как уже сказано, вывода самого числа, нет непосредственно и асинхронного вызова console.writeline.

Речь, скорее, о демонстрации на данном примере из собеседования, что кроме решения непосредственно задачи можно ещё показать умение пользоваться методами расширения, yield return'ом и async/await.
Ясное дело, что решение с минимальным читаемым кодом — это про другое.

Ну можно и через concat(), согласен :)
В принципе, всё делалось ряди погони за удобочитаемостью. Не меняя времени, затраченного на решение, можно было добавить сахарку за счет extension method для int:

        public static bool IsDivisableBy(this int source, int divisor)
        {
            return ((source % divisor) == 0 ? true : false);
        }

тогда тело цикла было бы как раз более читаемо с применением ?:
                string s = "";
                s += (i.IsDivisableBy(3) ? "Kiss" : "");
                s += (i.IsDivisableBy(5) ? "Miss" : "");
                if (s.Length==0)
                {
                    s = i.ToString();
                }
Написать
s += ((i % 3) == 0) ? "Kiss" : "";

слишком просто :))
Страны, для которых русско-язычные семьи являются местными, в рейтинге представлены только Россией.

image
image

Честно, не очень понимаю как можно в странах из этого перечня быть русскоязычными не-иммигрантами.
650 человек говорит дома на русском, однако проживают в России всего 295. И те, которые не проживают, ищут (или только-только нашли) работу начинающего программиста? А как же они оказались вне территории России? :)

В целом, интересная статистика. Еще не помешала бы раскладка по языкам, или, как обычно, JS+PHP в топе? :)
Аналогично, зашел сначала с шарпа. Минут пять потратил. Если я правильно понял про асинхронность, то мой вариант ниже:

   static void Main(string[] args)
        {
            for (int i = 0; i <= 100; i++)
            {
                string s = "";
                if (IsDivisableBy(i, 3))
                {
                    s += "Kiss";
                }
                if (IsDivisableBy(i, 5))
                {
                    s += "Miss";
                }
                if (s.Length == 0)
                {
                    s = i.ToString();
                }
                PrintAsync(s);
                Thread.Sleep(50);
            }

            Console.ReadKey();
        
        }

        static bool IsDivisableBy(int sourceNum, int divisor)
        {
            return ((sourceNum % divisor) == 0) ? true : false;
        }

        static async void PrintAsync(string s)
        {
            await Task.Run(() => Console.WriteLine(s));
        }
Хоть и не жабаскриптер, но можно else if превратить вот в такую конструкцию:

if (n % 5 === 0) {
s += 'Kiss';
}
console.log((s==='')? n: s);

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity