var или не var?

Автор Тема: var или не var?  (Прочитано 22543 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн NurGeoАвтор темы

  • ADN OPEN
  • Сообщений: 31
  • Карма: 1
var или не var?
« : 25-11-2015, 01:14:42 »
А можно вопрос. Почему не возникает исключение в случае когда объект не полилиния?
Это возможно только на C# или на vb.net также возможно?
Код - C# [Выбрать]
  1. var lwp = dbObj as Polyline; // If a "lightweight" (or optimized) polyline
И произойдет ли исключение если написать так,
Код - C# [Выбрать]
  1. Polyline lwp = dbObj; // If a "lightweight" (or optimized)
Синтаксис возможно неправильный, имеется ввиду если тип объекта указать переменной?

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: var или не var?
« Ответ #1 : 25-11-2015, 08:43:43 »
NurGeo, Я не большой специалист в С#, но тут могу ответить.
По С#: https://msdn.microsoft.com/ru-ru/library/cc488006.aspx  и тут http://professorweb.ru/my/csharp/assembly/level2/2_2.php (операторы AS, IS)
VB.NEt: https://msdn.microsoft.com/library/zyy863x8%28v=vs.100%29.aspx (Операторы CType, DirectCast и TryCast)

Александр любит объявлять переменные через var (такой стиль написания), к ошибке в данном случае это не приведет, но ИМХО это дурной тон.
Код становиться намного понятнее, если тип переменной указан явно.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: var или не var?
« Ответ #2 : 25-11-2015, 09:43:30 »
Александр любит объявлять переменные через var (такой стиль написания), к ошибке в данном случае это не приведет, но ИМХО это дурной тон.
Код становиться намного понятнее, если тип переменной указан явно
Да, соглашусь с Вами - это я пошел на поводу у ReSharper'а. Читать код конечно удобней, когда есть явное объявление типов, но как ни странно - я уже привык к var. Со временем (с опытом) конечно начну использовать оба варианта. Объявление через var иногда полезно и нужно (как например var dbObj в примере выше)

А можно вопрос. Почему не возникает исключение в случае когда объект не полилиния?
Как раз для этого используется оператор as. Смысл такой примерно - берем неявную переменную dbObj и пытаемся сделать ее явной (Polyline). Результат запишем в lwp. Если dbObj не является Polyline, то вместо исключения просто получим lwp == null.

Это возможно только на C# или на vb.net также возможно?
Возможно
И произойдет ли исключение если написать так
Да, произойдет, если dbObj не окажется Polyline

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: var или не var?
« Ответ #3 : 25-11-2015, 09:54:40 »
Объявление через var иногда полезно и нужно (как например var dbObj в примере выше)
не полезно и если внимательно посмотреть код на msdn, то это видно. Если вы заранее не знаете, какой объект автокада будете обрабатывать, то есть соответствующие родительские типы.
Смысл такой примерно - берем неявную переменную dbObj и пытаемся сделать ее явной (Polyline). Результат запишем в lwp. Если dbObj не является Polyline, то вместо исключения просто получим lwp == null.
ИМХО, не такой. Оператор AS сравнит типы переменных и если они совпадут, то передаст в переменную lwp указатель на этот объект в памяти. Не совпадут, не передаст,
именно по этому в примерах, такого рода приведения выполняются в не иницализированную переменную, которая еще не содержит указатель на объект и потому равна null. а обнулит переменную.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: var или не var?
« Ответ #4 : 25-11-2015, 09:57:45 »
не полезно
эмммм... не убедили ))
Оператор AS сравнит типы переменных и если они совпадут, то передаст в переменную lwp указатель на этот объект в памяти.
Так я тоже самое написал, только простым языком )) А если не совпадут - то null

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: var или не var?
« Ответ #5 : 25-11-2015, 09:59:08 »
Boxa.Shu, в любом случае - изъясняться красиво и правильно - не мой конек :D

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: var или не var?
« Ответ #6 : 25-11-2015, 10:49:09 »
е полезно и если внимательно посмотреть код на msdn, то это видно. Если вы заранее не знаете, какой объект автокада будете обрабатывать, то есть соответствующие родительские типы.
Вот интересные доводы и обсуждения на тему - http://habrahabr.ru/post/39231/

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Re: var или не var?
« Ответ #7 : 25-11-2015, 11:15:04 »
Вот интересные доводы и обсуждения на тему - http://habrahabr.ru/post/39231/
Я пожалуй процитирую один из ответов в том топике:
Цитировать
Доводы нормальные, но надо понимать, что в Microsoft тоже не глупые люди работают, и если они что-то рекомендуют (или не рекомендуют) в отношении использования ИХ инструментов, то лучше прислушаться именно к ним.
Уверен, доводов у Microsoft не меньше, тот же Кшиштоф Квалина часто разбирает подобные спорные моменты.

Если в инструкции к твоей машине написано, что масло нужно менять раз в 10000 км и лить бензин Аи 95 и выше, то ты именно так делать и будешь или начнешь выяснять, что будет если масло менять как попало и лить 76 и соляру? Думаю ответ очевиден.

Хотя флуд все это.

Оффлайн bargool

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Re: var или не var?
« Ответ #8 : 25-11-2015, 14:25:36 »
C# Coding Conventions (C# Programming Guide)
Раздел "Implicitly Typed Local Variables":
Цитировать
Use implicit typing for local variables when the type of the variable is obvious from the right side of the assignment, or when the precise type is not important
Так что всё зависит от ситуации (и предпочтения microsoft тоже меняются)
Алексей

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: var или не var?
« Ответ #9 : 25-11-2015, 22:06:11 »
Александр любит объявлять переменные через var (такой стиль написания), к ошибке в данном случае это не приведет, но ИМХО это дурной тон.
ИХМО явное указание типа это рудимент. Код не надо читать на печатной бумаге - для этого есть IDE, которые раскрашивают, делают автоотступы и пр. для читаемости кода - не зря А. Ривилис, в каждом втором посте нового автора напоминает  оформлять код соответствующим образом. Вывод типа давным давно успешно реализован - вот пример даже на web странице http://www.fssnip.net - (показывает тип при поднесении мыши к выражению любого примера). Явное задание типа - только разводит "типографию" и делает код менее универсальным. Да кое-где его лучше указать (например для лучшей работы интелисенса), но делать это повсеместно - это скорей результат дурного наследия C# от Си (имею в виду читаемость кода). Код должен не только описывать, но и показывать алгоритм задачи, а не "топить" Вас в типы и пр. второстепенную "мешуру" - хотя это конечно вопрос больше к синтаксису языка.

Оффлайн NurGeoАвтор темы

  • ADN OPEN
  • Сообщений: 31
  • Карма: 1
Re: var или не var?
« Ответ #10 : 25-11-2015, 22:48:32 »
Всем спасибо за информацию, получил необходимую информацию по is, as на C# и trycast на vb. Как же многого я не знаю, если абстрактно сравнить со школой, то даже букварь не освоил и уже хочу писать сочинения :).

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: var или не var?
« Ответ #11 : 25-11-2015, 23:23:10 »
и trycast на vb
ИМХО. Лучше не тратить время на освоение VB.Net
Как же многого я не знаю, если абстрактно сравнить со школой, то даже букварь не освоил и уже хочу писать сочинения
Почитайте недавний спор в этой теме - ответы с 19 по 24 ;)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: var или не var?
« Ответ #12 : 26-11-2015, 09:41:41 »
Дима_
Не согласен. Я считаю, что без всякого "поднесения мышки к выражению", про взгляде на программу, я должен сразу видеть типы переменных. Для меня это не обсуждается. И это условие усиливается в десять раз для учебного примера и в сто раз если это код для для передачи в ADN DevHelp. Почему кто-то должен тратить своё время для понимания моего кода только потому, что мне лень вписать правильные типы?

Дальше дискутировать на эту тему не буду - можете считать меня консерватором и ретроградом. ;)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: var или не var?
« Ответ #13 : 26-11-2015, 09:44:11 »
ну раз оффтоп, то можно себе позволить  ;D ;D ;D ::)


Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: var или не var?
« Ответ #14 : 26-11-2015, 09:52:19 »
Если оба варианта верны и работают (не берем в счет некоторые исключения), то логично предположить - оба варианта имеют место быть. Разница лишь в том, для чего/кого пишется код: если я пишу его только для себя и мне удобно использовать var - это не значит, что я делаю не правильно. Ну а если учебные пособия, коды для ADN help или работа с кодом нескольких людей - тогда уже можно и спорить. Даже не спорить - а придерживаться какого-то стиля. Тем более - в кодинге, как и в любом творческом деле, у каждого человека присутствует свой стиль! Даже вот эти варианты зрительно сильно отличаются:
Код - C# [Выбрать]
  1. var line = new Line(new Point3D(0,1,0), new Point3D(1,1,0));
и
Код - C# [Выбрать]
  1. Line line = new Line(
  2.      new Point3D(0,1,0),
  3.      new Point3D(1,1,0)
  4.      );