Запитання з тегом «language-design»

Тег для питань, пов’язаних із дизайном будь-якого аспекту мов програмування.

8
Чому масиви коваріантні, але генеричні дані інваріантні?
З ефективної Java Джошуа Блоха, Масиви відрізняються від загального типу двома важливими способами. Перші масиви є коваріантними. Дженріки інваріантні. Коваріант просто означає, що якщо X є підтипом Y, то X [] також буде підтипом Y []. Масиви є коваріантними, оскільки рядок є підтипом Object So String[] is subtype of Object[] …

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


5
Чому Java не допускає загальні підкласи Throwable?
Відповідно до специфікації мови Java , 3-е видання: Це помилка часу компіляції, якщо загальний клас є прямим або непрямим підкласом Throwable. Я хочу зрозуміти, чому було прийнято таке рішення. Що не так із загальними винятками? (Наскільки я знаю, дженерики - це просто синтаксичний цукор за часом компіляції, і вони будуть …

11
Чому Lua не має "продовження" заяви?
Протягом останніх місяців я багато мав справу з Lua, і мені дуже подобається більшість функцій, але я все одно чогось серед них не вистачає: Чому немає continue? Які обхідні шляхи існують для цього?

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

4
Чому для локальних змінних потрібна ініціалізація, а поля - ні?
Якщо я створюю bool у своєму класі, просто щось подібне bool check, воно за замовчуванням відповідає false. Коли я створюю той самий bool у своєму методі, bool check(замість класу), я отримую помилку "використання непризначеної перевірки локальної змінної". Чому?

9
Чому оператор перемикання розрахований на необхідність перерви?
Дано просту заяву про перемикання switch (int) { case 1 : { printf("1\n"); break; } case 2 : { printf("2\n"); } case 3 : { printf("3\n"); } } Відсутність заяви про перерву у випадку 2 означає, що виконання триватиме всередині коду для випадку 3. Це не випадковість; це було розроблено …
139 c  language-design 

28
Чому змінні, задекларовані в "спробувати", в області "улову" або "нарешті"?
У C # і в Java (і, можливо, в інших мовах) змінні, оголошені в блоці "спробувати", не знаходяться в межах відповідних блоків "catch" або "нарешті". Наприклад, наступний код не компілюється: try { String s = "test"; // (more code...) } catch { Console.Out.WriteLine(s); //Java fans: think "System.out.println" here instead } …

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? Дивіться коментований рядок нижче (приклад, взятий із статті навчальних посібників Javaswitch ): { String month = null; switch (month) { case "january": monthNumber = 1; break; case "february": monthNumber = 2; break; case "march": monthNumber …

8
Чому в заголовку вбудовані функції C ++?
Примітка. Це не питання про те, як використовувати вбудовані функції або як вони працюють, більше чому вони зроблені так, як є. Декларація функції члена класу не потребує визначення функції як inline, а лише реальна реалізація функції. Наприклад, у файлі заголовка: struct foo{ void bar(); // no need to define this …

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.