Странности в MSDN

MSDN
MSDN, если кто не знает, это Microsoft Developer Network — сборник разнообразной документации(плюс форумы, блоги, бюллетни т.д.) по продукции компании Microsoft (и не только). Я лично этот ресурс уважаю, часто пользуюсь и считаю его полезным. Но как-то так вышло, что в последнее время несколько раз подряд напоролся на очень странные статьи и код в примерах. Нет, я не говорю об опечатках, битых ссылках или неверной верстке — с кем не бывает?

Тут вещи поинтереснее.


Страница: Константы (руководство по программированию на C#)
Вкратце суть: на страничке рассказывается что такое константы, зачем они нужны. Объясняется, что константа — это такая величина, которая известна заранее, неизменна, не зависит от действий пользователя и прочих внешних факторов. Дальше приводится пример констант:

class Calendar2
{
const int months = 12, weeks = 52, days = 365;
}


Неправда ли, отличный пример константы — 365 дней в году! Ладно бы это была опечатка или вообще полное отсутствие примера. Ладно бы такое было написано в какой-нибудь другой теме, где это не важно и можно было не обращать внимание. Но ведь нет — суть понятия константы иллюстрируется примером, константой не являющимся и полностью противоречащим объясняемому понятию. Жуть.

По этому поводу, мне, к стати, вспоминается другая книга по C++, где необходимость использования констант объяснялась с упором на то, что объявив константу и использовав её в коде, мы сможем при её изменении в будущем обойтись правкой всего одного места в коде. Как пример приводилось объявление const double PI = 3.1415926. Ну, типа, если число Пи измениться, то надо будет поменять только в одном месте. :)

Страница: override (C# Reference) (открывать в установленном MSDN 2008 и без приставки htp://)
Вкратце суть: на странице описывается модификатор override для языка C#. Рассказывается, что этот модификатор обязывает в классе-наследнике реализовать метод родительского класса. И приводится пример с базовым классом ShapesClass, от которой наследуется класс Square. В родительском классе есть метод Area, который там не определен, но с атрибутом override, а вот в классе Квадрат есть его реализация. Площадь КВАДРАТА считается как ширина квадрата умноженная на высоту квадрата. :) Я уж было даже засомневался, что «square» — это квадрат (может прямоугольник). Но нет — и гугл и яндекс и лингво первым и главным переводом слова пишут именно «квадрат». А прямоугольник — это «rectangle».

Пример кода:
abstract class ShapesClass
{
abstract public int Area();
}

class Square : ShapesClass
{
int x, y;
// Because ShapesClass.Area is abstract, failing to override
// the Area method would result in a compilation error.
public override int Area()
{
return x * y;
}
}


Тут, справедливости ради, нужно признать что в онлайн-версии MSDN что-то около конца 2009-го года страница была исправлена на:

public override int Area()
{
return side * side;
}


Что ж, радует, что наука не стоит на месте и столь передовые достижения, как метод рассчета площади квадрата, доступны в MSDN уже в 2009 году.

Страница: описание тега dns в конфигурационной схеме WCF
Вкратце суть: тег dns позволяет задать то, чем по сути и является DNS — соответствие имени хоста IP-адресу. Дока написана верна, и пример, в принципе рабочий и нормальный. Широкую улыбку вызывает объяснение примера:

"...Users can remember display names, such as http://go.microsoft.com/fwlink/?prd=10929&pver=3.5&plcid=0x409&clcid=0x409&ar=MS&sar=MS or ..., easier than number-based addresses, such as 207.46.131.137."

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

Страница: Key Scan Codes
Вкратце суть: на странице даётся перечень скан-кодов клавиш клавиатуры. Эти значения широко применяются в драйверах, низкоуровневом вводе-выводе и т.д. Мне, например, они понадобились для написания собственного преобразователя Scan codes <-> Virtual Key Codes, поскольку аналога функции MapVirtualKey в .NET нету, а юзать вызов из user32.dll как-то не хочеться. Но что мы видим по приведенной выше ссылке? Скан-коды предоставлены в виде картинки с нарисованной на ней таблицей значений. При чем, судя по качеству, картинка сканировалась из какой-то книги допотопного года и плохо распознанные части потом обводились вручную болдом. И как мне, спрашивается, выдрать эти значения оттуда? Переписывать? Поиск в Гугле, конечно, рулит и коды в виде текста находятся, но пример в MSDN — это жесть.

Все примеры, конечно, не критичны и вызывают скорее улыбку и пожимание плечами, чем негодование. Но это для нас с вами, смотрящих на сей несовершенный мир с изрядной долей скепсиса. А вот какого-нибудь молодого начинающего программиста, открывающего MSDN впервые и веря в него, как в источник высшей истины, эти мелочи могут заставить нехило задуматься.

Updated:
Веселая странность от adontz
Страница: drink Attribute
Вкратце суть: разработчики Active Directory предположили, что важным атрибутом юзера наравне с его именем, паролем, телефоном и т.д. является его любимый напиток. И эта информация тоже должна храниться в базе данных. Более того, согласно описанию поля любимый напиток может быть не только у человека, но и у любого объекта Active Directory.

P.S. Я ведь не сильно обнаглею, если робко попрошу минусующих черкнуть комментарий с замечаниями? Заранее спасибо.
–1
1 февраля 2010, 17:15
tangro 426,9

комментарии (20)

+1
Vladek #
В классическом режиме отображения документации есть раздел «Содержимое Сообщества», который можно дополнять своими материалами и исправлениями.
0
aleman #
> Неправда ли, отличный пример константы — 365 дней в году!
А где написано что в году? Там константа days а не daysofyear например.

0
tangro #
Ну, там дальше еще есть код:

Язык C#

class Calendar3
{
const int months = 12;
const int weeks = 52;
const int days = 365;

const double daysPerWeek = (double) days / (double) weeks;
const double daysPerMonth = (double) days / (double) months;
}

Из которого следует, что речь все-таки идет о количестве дней в году. А еще — что что число дней в неделе — оно типа double и равно где-то 7,0192. :)
+5
adontz #
MSDN огромный по объёму кладезь информации. Было бы странно, если бы ошибок не было.
0
tangro #
Ну конечно, я ведь сразу написал что MSDN использую и уважаю. Статья не о том, что там есть ошибки, а о том, какими интересными и нестандартными они могут быть.
+3
RomanNikitin #
К сожалению код и статьи для MSDN часто аутсорсят в страну Главного Аутсорсера Мира, так что проколы вполне возможно.
Делайте фидбэк при найденных ошибках.
Если не знаете кому — напишите Даниле Корневу (i-daniek[at NO spam]microsoft.com), он занимается русским MSDN и наверняка сможет помочь.
+1
tangro #
Ну, страницу с рассчетом площади квадрата уже пофиксили, тег dns, как оказалось, вообще очень известный мем, даже в гугле по запросу «MSDN humor» находится, а об остальном напишу. Спасибо за адрес.
0
outcoldman #
Спасибо, было интересно. Жаль что пока статья находиться в минусе. К таким мелочам не придираешься и не замечаешь, но у вас глаз зоркий :)
Долго собирали информацию или как то в один день обучения попалось?
+1
tangro #
Где-то за недели две на глаза попалось. До этого еще пару раз видел просто некомпилирующийся код (ну там функции с двумя параметрами передают на вход три) — но это ведь не интересно, просто опечатки.
+1
adontz #
В копилку странностей
msdn.microsoft.com/en-us/library/ms675651%28VS.85%29.aspx
+1
tangro #
Спасибо, с Вашего разрешения, добавлю в статью, со ссылкой на Вас.
+1
Alexandr_Kucher #
Я извиняюсь, Вы решили посмотреть референс по константам в программировании на C# или открыли справочник по астрономии или географии?? Если последнее — то Ваше мнение ошибочно! Откройте более — менее серьезный справочиник по астрономии и Вы увидите, что лет через 20 прибавится еще 1 день в году! То есть я хочу сказать — не придирайтесь! это ПРИМЕР кода а не вариант ГОТОВОЙ коммерческрй программы.
+1
tangro #
Немного не понял, почему моё мнение ошибочно. Утверждение, что «число дней в году равно 365 и является константой» неверно как с точки зрения статьи по константам, так и с точки зрения справочника по астрономии. Просто нашел я его в статье по константам по тому и упомянул.

На счет того, что это пример кода, а не вариант готовой программы, то как бы Вы, скажем, отреагировали в статье об арифметических операциях в любом языке программирования на пример в духе:

"… а оператор "+" выполняет операцию суммирования. Например, 2+2 будет 5."

Сказали бы что это не учебник арифметики и нефиг придираться?
НЛО прилетело и опубликовало эту надпись здесь
+3
Infernal #
>const int PI = 3.1415926. Ну, типа, если число Пи измениться, то надо будет поменять только в одном месте.
int PI это тоже фейл:)
+1
tangro #
Ну это уже мой фейл, в книге так точно не было. :) Я краснею и смущаюсь. Сейчас исправлю.
0
Doomsday_nxt #
> пример приводилось объявление const int PI = 3.1415926. Ну, типа, если число Пи измениться, то надо будет поменять только в одном месте. :)

во первых — проще пистать ПИ везде чем значение… это раз, а во вторых — а вдруг вы захотите увеличить или уменьшить точность данной константы?
0
tangro #
конечно, именно так и верно писать — сделать константу или дефайн и использовать её (а лучше юзать уже имеющуюся в любом языке встроенную константу для Пи). Не в этом дело, а в том, что в той книге главным аргументом была именно возможность изменения Пи. Уменьшать точность? Зачем? Увеличивать? Хм… может быть когда-то и вправду понадобится, как-то сразу не подумал об этом, спасибо.
0
z123 #
>const int months = 12, weeks = 52, days = 365;
>Неправда ли, отличный пример константы — 365 дней в году!

по-моему, про год там ни слова нету
0
tangro #
см. третий сверху коммент.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.