В глаза бросается злоупотребление ключевым словом 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 на всякий случай.
Речь, скорее, о демонстрации на данном примере из собеседования, что кроме решения непосредственно задачи можно ещё показать умение пользоваться методами расширения, yield return'ом и async/await.
Ясное дело, что решение с минимальным читаемым кодом — это про другое.
В принципе, всё делалось ряди погони за удобочитаемостью. Не меняя времени, затраченного на решение, можно было добавить сахарку за счет 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();
}
650 человек говорит дома на русском, однако проживают в России всего 295. И те, которые не проживают, ищут (или только-только нашли) работу начинающего программиста? А как же они оказались вне территории России? :)
В целом, интересная статистика. Еще не помешала бы раскладка по языкам, или, как обычно, JS+PHP в топе? :)
За сим позвольте откланяться.
Вот, кстати, да. Тоже не очень понятно в чем принципиальная необходимость возврата true и отдельно false.
Чем не вариант?
Еще позволю себе совет: в именовании переменных и методов лучше сразу стараться себя приучить делать это dotnet way :) Никаких подчеркиваний в именах переменных/методов, за исключением приватных полей класса:
ну и т.д. :))
Для таких целей можно попробовать постоянно живущий BackgroundWorker и блокировку очереди сообщений посредством ReaderWriterLock. А чтобы не убивать каждый раз процесс, можно построить на базе AutoResetEvent флажок, который поднимается при записи сообщения в очередь и поднятия которого ждет фоновый процесс через WaitOne().
Кроме того, не мешало бы завернуть File.AppendAllLines в блок try/catch на всякий случай.
Но речь о другом.
Почему, например, не сделать блок через using?
И еще вопрос — не увидел блокировок в логгере. Как он себя поведет, когда несколько потоков его дернут одновременно?
Кроме, как уже сказано, вывода самого числа, нет непосредственно и асинхронного вызова console.writeline.
Речь, скорее, о демонстрации на данном примере из собеседования, что кроме решения непосредственно задачи можно ещё показать умение пользоваться методами расширения, yield return'ом и async/await.
Ясное дело, что решение с минимальным читаемым кодом — это про другое.
тогда тело цикла было бы как раз более читаемо с применением ?:
слишком просто :))
Честно, не очень понимаю как можно в странах из этого перечня быть русскоязычными не-иммигрантами.
В целом, интересная статистика. Еще не помешала бы раскладка по языкам, или, как обычно, JS+PHP в топе? :)
if (n % 5 === 0) {
s += 'Kiss';
}
console.log((s==='')? n: s);