Вопросы с тегом «language-design»

Тег для вопросов, связанных с дизайном любого аспекта языков программирования.

8
Почему массивы ковариантны, а дженерики инвариантны?
От эффективной Явы Джошуа Блох, Массивы отличаются от универсального типа двумя важными способами. Первые массивы ковариантны. Обобщения являются инвариантами. Ковариант просто означает, что если X является подтипом Y, то X [] также будет подтипом Y []. Массивы являются ковариантными, так как string является подтипом Object So String[] is subtype of …

10
Почему закрытые поля закрыты для типа, а не для экземпляра?
В C # (и многих других языках) совершенно законно обращаться к закрытым полям других экземпляров того же типа. Например: public class Foo { private bool aBool; public void DoBar(Foo anotherFoo) { if (anotherFoo.aBool) ... } } Как указано в спецификации C # (разделы 3.5.1, 3.5.2), доступ к закрытым полям осуществляется …


11
Почему в Lua нет оператора continue?
Я много работал с Lua в последние несколько месяцев, и мне действительно нравится большинство функций, но я все еще упускаю кое-что из них: Почему нет continue? Какие есть обходные пути для этого?

5
Почему Java не допускает общие подклассы Throwable?
Согласно спецификации языка Java , 3-е издание: Это ошибка времени компиляции, если универсальный класс является прямым или косвенным подклассом Throwable. Я хочу понять, почему это решение было принято. Что не так с общими исключениями? (Насколько я знаю, дженерики - это просто синтаксический сахар во время компиляции, и они в Objectлюбом …

28
Почему переменные не объявлены в «try» в области видимости в «catch» или «finally»?
В C # и Java (а также, возможно, в других языках) переменные, объявленные в блоке «try», не попадают в область видимости соответствующих блоков «catch» или «finally». Например, следующий код не компилируется: try { String s = "test"; // (more code...) } catch { Console.Out.WriteLine(s); //Java fans: think "System.out.println" here instead …

7
Почему в Ruby есть как частные, так и защищенные методы?
Прежде чем я прочитал эту статью , я думал, что контроль доступа в Ruby работает следующим образом: public- может быть доступен любой объект (например Obj.new.public_method) protected - можно получить доступ только внутри самого объекта, а также любых подклассов private - то же, что и protected, но метод не существует в …

4
Почему локальные переменные требуют инициализации, а поля - нет?
Если я создаю в своем классе bool, что-то вроде того bool check, по умолчанию он имеет значение false. Когда я создаю такой же bool в своем методе bool check(а не в классе), я получаю сообщение об ошибке «использование неназначенной проверки локальной переменной». Зачем?

9
Почему оператор switch был разработан с учетом необходимости перерыва?
Учитывая простой оператор switch switch (int) { case 1 : { printf("1\n"); break; } case 2 : { printf("2\n"); } case 3 : { printf("3\n"); } } Отсутствие оператора break в случае 2 означает, что выполнение будет продолжено внутри кода для случая 3. Это не случайно; так оно и было …
140 c  language-design 

10
Почему python dict.update () не возвращает объект?
Я пытаюсь сделать: award_dict = { "url" : "http://facebook.com", "imageurl" : "http://farm4.static.flickr.com/3431/3939267074_feb9eb19b1_o.png", "count" : 1, } def award(name, count, points, desc_string, my_size, parent) : if my_size > count : a = { "name" : name, "description" : desc_string % count, "points" : points, "parent_award" : parent, } a.update(award_dict) return self.add_award(a, …

13
Зачем C ++ нужен отдельный заголовочный файл?
Я никогда не понимал, почему C ++ нуждается в отдельном заголовочном файле с теми же функциями, что и в файле .cpp. Это делает создание классов и их рефакторинг очень сложным, а также добавляет ненужные файлы в проект. И тогда возникает проблема с необходимостью включения заголовочных файлов, но с явной проверкой, …

24
Почему имена переменных не могут начинаться с цифр?
Некоторое время назад я работал с новым разработчиком C ++, когда он задал вопрос: «Почему имена переменных не могут начинаться с цифр?» Я не мог придумать ответ, за исключением того, что некоторые числа могут содержать текст (123456L, 123456U), и это было бы невозможно, если бы компиляторы думали, что все с …

9
Почему Ruby не поддерживает i ++ или i-- (операторы увеличения / уменьшения)?
Операторы увеличения / уменьшения до / после операции ( ++и --) представляют собой довольно стандартный синтаксис языка программирования (по крайней мере, для процедурных и объектно-ориентированных языков). Почему Руби их не поддерживает? Я понимаю, что вы могли бы сделать то же самое с помощью +=и -=, но кажется странным произвольным исключать …

9
Почему оператор String switch не поддерживает нулевой регистр?
Мне просто интересно, почему switchоператор Java 7 не поддерживает nullрегистр, а вместо этого бросает NullPointerException? См. Прокомментированную строку ниже (пример взят из статьи Java Tutorialsswitch ): { String month = null; switch (month) { case "january": monthNumber = 1; break; case "february": monthNumber = 2; break; case "march": monthNumber = …

8
Почему в заголовке указаны встроенные функции C ++?
NB. Это не вопрос о том, как использовать встроенные функции или как они работают, а скорее о том, почему они сделаны такими, какие есть. Объявление функции-члена класса не требует определения функции, поскольку inlineэто только фактическая реализация функции. Например, в заголовочном файле: struct foo{ void bar(); // no need to define …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.