1. C# / Говнокод #22416

    −15

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    public static class ProgramIO
    {
    	private static bool enabled;
    
    	static ProgramIO()
    	{
    		ProgramIO.Enable();
    	}
    
    	public static bool IsEnabled()
    	{
    		return ProgramIO.enabled;
    	}
    
    	public static void Enable()
    	{
    		ProgramIO.enabled = true;
    	}
    
    	public static void Disable()
    	{
    		ProgramIO.enabled = false;
    	}
    
    	public static void WriteMessages(List<Message> messages)
    	{
    		foreach (var item in messages) ProgramIO.WriteLine(item.GetText());
    	}
    
    	public static void Write(string str)
    	{
    		if (ProgramIO.IsEnabled()) Console.Write(str);	
    	}
    
    	public static void WriteLine(string str)
    	{
    		if (ProgramIO.IsEnabled()) Console.WriteLine(str);	
    	}
    
    	public static void WriteLine()
    	{
    		ProgramIO.WriteLine("");
    	}
    
    	public static int Read()
    	{
    		if (ProgramIO.IsEnabled()) return Console.Read();	
    		return 0;
    	}
    
    	public static string ReadLine()
    	{
    		if (ProgramIO.IsEnabled()) return Console.ReadLine();	
    		return "";
    	}
    }

    "Не говно, а абстракция" (С), Автор сего

    Запостил: dm_fomenok, 20 Февраля 2017

    Комментарии (8) RSS

    • инкапсуляция
      Ответить
    • Я одного понять не могу - static-то зачем?
      Или шарповый статик сильно отличается по смыслу от джавы, или я не понимаю, зачем выносить это на уровень класса. Особенно если это была попытка построить инкапсуляцию.
      Ответить
      • > > Я одного понять не могу - static-то зачем?
        Я одного понять не могу - класс-то зачем?

        Автор утверждал, что стандартный класс Console не интуитивен и не понятен. И сотворил, по его словам, абстракцию

        Судя по всему, абстракцию он нашёл в методе void WriteMessages(List<Message> messages) (List<> кстати тоже его, который внутри содержит стандартный)
        Ответить
        • А может быть, абстракция заключается в отключаемости консоли? Вызываем ProgramIO.Disable(), и консоль работает абстрактно.
          Ответить
          • -
            Ответить
            • Анон не забывает, что тут было написано, и не прощает.

              Тут всего лишь гипотетическая потеря пирфоманса из-за лишней передачи управления. Гораздо серьёзнее потеря в WriteMessages, где будет гоняться холостой цикл.

              P.S. Кстати, можно разжечь срач на тему, где правильнее проверять флажок enabled: в самом начале цепочки выполнения (когда в худшем случае флаг будет проверен дважды) или непосредственно перед вызовом неабстрактного метода типа Console.Write().
              Ответить
            • P.P.S. Вообще, если переключение флага enabled происходит редко, то с точки зрения пирфоманса выгоднее завести таблицу методов и переключать её, чтобы не проверять флаг на каждом вызове. Например, завести два гомологичных класса (один реально пишет в сосноль, другой ничего не делает) и доверять исполнение всех операций им.
              Ответить
              • В C# есть препроцессор
                можно вообще компайлтайм
                Ответить

    Добавить комментарий