Форум программистов, компьютерный форум, киберфорум
.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Заблокирован

Зачем в .NET в 2014 г. строгая типизация? Зачем нужно писать Convert.ToInt32(), ToString(), Int32.Parse()?

31.07.2014, 19:54. Показов 2734. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
По поводу преобразования.
Современный препроцессор кода сам определяет, что куда преобразовывать. Если в функцию, принимающую строку, передать число, то он не только видит ошибку, но и видит, что нужно преобразовать именно число и именно в строку.
Почему бы ему самому (точнее, компилятору) не делать это в MSILе, который он дает на выходе? А в коде пусть не будет этих бесконечных Convertов, ToStringов и прочего. Как в VB.NET, но еще лучше (там, если не ошибаюсь, это дело местами все-таки нужно).

По поводу типизации вообще.
C#, VB.NET, C++/CLI используют управляемый код. В чем проблема реализовать динамическую типизацию?
Объявили переменную без типа - она становится самого экономичного в плане ресурсов типа (bool, если не путаю).
Присвоили ей строку - она становится String.
Записали в нее число - она становится Integer/Float/... (смотря какое число).
Записали обратно строку - снова String.
Передали в функцию, которая на входе принимает не строку, а число - попытались преобразовать ее в число - не получилось - выдали необработанное исключение.
Problems?

По идее, это должно еще и экономить ОЗУ для не очень качественных кодов, ведь под каждую переменную будет отведен предельный минимум памяти.

Чтобы не было путаницы с типами для самого программиста, есть венгерское соглашение. Или можно придумать ему достойную и удобную современную замену.

И еще (уже не совсем по теме).
Почему не сделать для контролов, скажем так, "основные свойства", чтобы например вместо pictureBox1.Image можно было написать просто pictureBox1 в соответствующем контексте? Или просто textBox1 вместо textBox1.Text.
Такая практика была распространена в Visual Basic до-.NET-овской эпохи. В VB.NET ее не внедрили или отказались, и очень зря.

Где я неправ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.07.2014, 19:54
Ответы с готовыми решениями:

Есть ли разница между int.Parse и Convert.ToInt32 ?
Доброго времени суток:) Возник такой вопрос. В чём разница между: array1 = int.Parse(groupBox1.Controls.Text); и array1 =...

Зачем и когда нужно писать ключевое слово static
Не как не могу понять зачем и когда нужно писать ключевое слово static. Может вы мне подскажите ?

Зачем нужно писать 2 раза название класса в методе?
Зачем нужно писать 2 раза название класса в методе? В данном случае класс ThreeD: ThreeD b = new ThreeD(10, 10, 10); //44-ая строка ...

10
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
31.07.2014, 20:10
Цитата Сообщение от мяука Посмотреть сообщение
Современный препроцессор кода сам определяет, что куда преобразовывать.
Не препроцессор, а автовыведение типов, для этого в C# есть var.
Цитата Сообщение от мяука Посмотреть сообщение
В чем проблема реализовать динамическую типизацию?
В C# dynamic.
Цитата Сообщение от мяука Посмотреть сообщение
Problems?
Никому не нужна динамическая типизация, скорость работы программы значительно упадет.
Цитата Сообщение от мяука Посмотреть сообщение
По идее, это должно еще и экономить ОЗУ для не очень качественных кодов, ведь под каждую переменную будет отведен предельный минимум памяти.
Это не сэкономит память, в переменной хранится только адрес объекта, реальные объекты будут занимать всю ту же память.
Цитата Сообщение от мяука Посмотреть сообщение
Чтобы не было путаницы с типами для самого программиста, есть венгерское соглашение.
Я совсем немного программирую, но думаю, что это пережитки прошлого, современные средства автодополнения и подсказок легко показывают какого типа переменная.
Цитата Сообщение от мяука Посмотреть сообщение
Почему не сделать для контролов, скажем так, "основные свойства", чтобы например вместо pictureBox1.Image можно было написать просто pictureBox1 в соответствующем контексте? Или просто textBox1 вместо textBox1.Text.
Исходя из всего выше сказанного,
C#
1
pictureBox1 = image;
догадайтесь, image это элемент управления, который необходимо присвоить переменной pictureBox1 или объект изображения, который нужно присвоить свойству Image?

Статическая типизация во многом облегчает анализ кода, за счет чего можно писать хорошие IDE со средствами автодополнения, навигации и рефакторинга.
0
Заблокирован
31.07.2014, 21:09  [ТС]
Никому не нужна динамическая типизация
Нужна тем, что ускоряет процесс написания кода.

скорость работы программы значительно упадет.
Теоретически - может быть. Однако на практике проблемами в производительности страдают именно строго типизированные ЯП. Java страдает, а Python нет.

реальные объекты будут занимать всю ту же память
Зачем бы тогда были нужны такие типы данных, как Bool, Short да и вообще Integer?
Сделать уж 1 тип сразу по максимуму, цифры на 32, двойной точности да с плавающей запятой и везде его юзать.

современные средства автодополнения и подсказок легко показывают какого типа переменная.
Ну насколько я знаю при просмотре большого сложного кода с динамической типизацией, они не дают возможности увидеть типы всех переменных сразу.
А благодаря венгерскому соглашению, они сразу видны.
Оно неудобно тем, что префиксы надо держать в памяти и придумывать самому (или брать из редких нестандартизированных источников) для современных контролов. Почему бы не автоматизировать эти процессы в IDE по определенному стандарту?
Вплоть до того, что пишешь скажем
Code
1
x = 3.14
И как только жмешь на точку, перед x сразу вставляется префикс, типа
Code
1
fX = 3.14
или
Code
1
f_x = 3.14
Разумеется, все это лишь концепты и нужно еще продумать и поэкспериментировать (как с самим собой, так и с добровольцами), как сделать так, чтобы оно действительно помогало, а не создавало неудобства.

Исходя из всего выше сказанного, догадайтесь, image это элемент управления, который необходимо присвоить переменной pictureBox1 или объект изображения, который нужно присвоить свойству Image?
Исходя из всего вышесказанного (в т.ч. про венгерское соглашение или его аналог), в первом случае будет как-то так
Code
1
pb_1 = pb_image
а во втором так
Code
1
pb_1 = img_image
До чего тут догадываться? Все и так ясно.
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
31.07.2014, 22:05
Цитата Сообщение от мяука Посмотреть сообщение
Нужна тем, что ускоряет процесс написания кода.
Я уже говорил, что анализ кода затруднен в динамически типизированных языках программирования, отсюда невозможность сделать нормальное автодополнение, и совсем наоборот в статически типизированных языках -> можем написать нормальный анализатор -> можем написать нормальную IDE с автодополнением -> в нормальной IDE код пишется быстрее.
Цитата Сообщение от мяука Посмотреть сообщение
Однако на практике проблемами в производительности страдают именно строго типизированные ЯП.
http://habrahabr.ru/post/66562/ - наглядная диаграмма, думаю после нее можно оставить вопрос производительности.
Цитата Сообщение от мяука Посмотреть сообщение
Зачем бы тогда были нужны такие типы данных
Потому что у каждого типа свой размер.
Цитата Сообщение от мяука Посмотреть сообщение
Почему бы не автоматизировать эти процессы в IDE по определенному стандарту?
Вопрос стандартизации сложная штука, есть HTML5, вроде стандарт, а все равно всем приходится верстать под каждый браузер. Венгерская нотация сложный вопрос, я против нее. Думаю, что в статически типизированных языках она портит читаемость.
Цитата Сообщение от мяука Посмотреть сообщение
До чего тут догадываться? Все и так ясно.
Вы не поняли, у вас динамически типизированный язык, никто вам не запрещает присвоить переменной img_image элемент управления, а не картинку, как следствие, отладчик будет вашим другом на ближайший час.
Тема - холивар. Я сливаюсь.
0
Заблокирован
31.07.2014, 22:19  [ТС]
Петррр,
отсюда невозможность сделать нормальное автодополнение
Автодополнение - это когда вводите "But" и получаете "Button", не? Причем тут типизация?
Button как тип будет по-любому. Может его даже и придется задавать явно. Я больше про такие вещи, как строки и числа.

наглядная диаграмма, думаю после нее можно оставить вопрос производительности.
Бред там. Там подсчитали, сколько времени займет выполнение какого-то алгоритма. На провисания программы в процессе его выполнения (которые ихний "счетчик" может вообще не замечать, на то они и провисания) и на время запуска программы все забили болт.
Может с таких извращенных позиций жаба и быстрее С++.

Потому что у каждого типа свой размер.
И я к тому же.
При строгой типизации, человек, дабы побыстрее, сделает все переменные Integer, хотя во многих случаях можно было бы обойтись чем-то полегче.
При динамической типизации, компилятор сам решит, какого типа должна быть каждая переменная, в зависимости от значений, которые в ней оказываются при выполнении программы.

никто вам не запрещает присвоить переменной img_image элемент управления
Смотря когда. Если при объявлении сначала сделать Image, а потом PictureBox, то переменная станет pic_image, а не img_image.
Если же сделать Image, передать его в какую-то функцию для работы с картинкой, а потом взять и присвоить этой переменной PictureBox, то оно должно присвоиться, но IntelliSense выдаст warning, а при отладке будет не то, что ожидал юзер.

Тема - холивар.
Реально существующие ЯП vs футуристический концепт еще не существующего - это холивар?
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
31.07.2014, 22:31
Цитата Сообщение от мяука Посмотреть сообщение
Где я неправ?
вкраце - везде.
Нужна тем, что ускоряет процесс написания кода.
тото у питонщиков plyntы и реры запускасть при малейшем изменении. миф это короче.
Зачем бы тогда были нужны такие типы данных, как Bool, Short да и вообще Integer?
затем что бинарные данные они бывают разного типа. и их тоже надо уметь обрабатывать.
Однако на практике проблемами в производительности страдают именно строго типизированные ЯП. Java страдает, а Python не
http://benchmarksgame.alioth.d... body#about оно и видно, никаких проблем с производительностью в питоне нет. он правда (со всеми его сишними библиотеками) на предпсоледнем месте с какимто чудовищным замедлением на пару порядков, а так конечно все нормально.
А благодаря венгерскому соглашению....
которое всеми забыто лет 10 как уже, и с которым совершенно непонятно что делать при изменении типа у переменной.

а вообще для любителей есть IronPython вроде как. и руби было.
1
Заблокирован
31.07.2014, 22:42  [ТС]
pycture,
вкраце - везде.
Видео ровно и автор чудак.

никаких проблем с производительностью в питоне нет. он правда (со всеми его сишними библиотеками) на предпсоледнем месте
Пусть будет так. Зато джава почти сразу после сишных ЯП идет.
Но почему-то простое гуевое приложение с окошком и кнопочкой хелловорлд, на джаве кушает куда больше ресурсов и запускается в разы медленнее, чем аналогичное на питоне. А если туда еще текстовое поле добавить, или что еще посерьезнее - то приложение на джаве уже провисать начинает на компе со слабым ОЗУ. Приложение на питоне на компе с тем же ОЗУ - не провисает, даже когда запущено то приложение на джаве.

а вообще для любителей есть IronPython вроде как
Надо не другой язык.
Надо модификацию C# и сервис пак для VS, обеспечивающий с ней удобную работу. В частности, именно IDE - в примитивном варианте - отвечает за автогенерирование Convert'ов и прочих ToString'ов.
Если я буду такое писать, я вряд ли буду сам с нуля писать компилятор шарпа, только ради того, чтобы внести в него эти поправки. Но перед компиляцией код пройдет через особый препроцессор, который сгенерирует конверты и т.д.
При этом код, выданный препроцессором, программист тоже сможет свободно изменять, а при желании вообще отключить препроцессор к чертям.
И IDE - либо напишу свою, либо сделаю плагины для VS/SharpDevelop. Лучше бы первое.

и с которым совершенно непонятно что делать при изменении типа у переменной
В статически типизированном ЯП вполне себе понятно. IDE должна сама менять префикс у переменной согласно типу.
В динамически - остается много вопросов, надо много думать и пробовать, но на первый взгляд, идея динамически типизированной (или вовсе "слаботипизированной") реализации С#, лично мне кажется очень перспективной.
0
01.08.2014, 01:34

Не по теме:

ВЗ, за тобой прикольно со стороны наблюдать, такие темы перспективные создаешь, далеко пойдешь :popcorn:

0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
01.08.2014, 07:16
Цитата Сообщение от мяука Посмотреть сообщение
Но почему-то простое гуевое приложение с окошком и кнопочкой хелловорлд, на джаве кушает куда больше ресурсов и запускается в разы медленнее, чем аналогичное на питоне
наверно потому что джава и нет это JIT компиляторы, а питон - байткодный интерпретатор. остальное следует из этого.
В частности, именно IDE - в примитивном варианте - отвечает за автогенерирование Convert'ов и прочих ToString'ов.... И IDE - либо напишу свою, либо сделаю плагины для VS/SharpDevelop. Лучше бы первое.
lint не забудьте написать к этому. иначе это будет бесконечный поток глюков как в питоне.
но на первый взгляд, идея динамически типизированной (или вовсе "слаботипизированной") реализации С#, лично мне кажется очень перспективной
вы лучше почитайте и подумайте зачем сделали TypeScript.
0
 Аватар для Mikant
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
02.08.2014, 01:11
NickoTin, вот испортил всё впечатление)) только хотел написать, что сон разума рождает чудовищ..)
0
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
02.08.2014, 22:14
Автору темы, зачем писать - сделайте и покажите как надо. А то так разсуждать каждый дурак сможет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.08.2014, 22:14
Помогаю со студенческими работами здесь

Зачем нужна cms? Это типа шаблонов сайтов? Нужно ли без неё писать?
Короче,я туплю. CMS - это типа для тех,кому сайты самому лень писать,вроде, ucoz,joomla и т.д? Если я буду писать на asp,django,php ,зачем...

Строгая типизация
Есть такое задание С логикой внутри функции я разобрался, как теперь сделать типизацию? С аргументом функции вроде бы понято,...

Зачем переопределять методы ToString(), GetHashCode(), Equals()
В голове не укладывается. Зачем это на практике нужно?

Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить?
Вот еще один вопрос зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может...

Зачем писать randomize()
Зачем писать randomize(); Если функция (random(21)-10) работает и без этой строки, зачем это вообще надо?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 05.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru