Re[9]: Вывод типа переменной
От: artelk  
Дата: 05.05.11 14:41
Оценка:
Здравствуйте, AlexCab, Вы писали:

A>>пример приведи

AC>
AC>//Определения 
AC> Handle VAR
AC>//Работаем с окном
AC> Handle = GetWindowHandle()
AC> PostMessage(Handle)
AC> /*Делаем что то ещё с окном*/
AC>//Работаем с потоком
AC> Handle = GetThreadHandle()
AC> PostThreadMessage(Handle)
AC> /*Делаем что то ещё с потоком*/
AC> PostMessage(Handle) //<-- Ошибка типа
AC>


Думаю, если назвать переменные windowHandle и threadHandle, то понятность кода, по крайней мере, не ухудшится.
А где тут мутабельность переменной?
def handle = GetWindowHandle();
PostMessage(handle);
//...
def handle = GetThreadHandle();
PostThreadMessage(handle);

другой пример приведи
Re[10]: Вывод типа переменной
От: AlexCab LinkedIn
Дата: 05.05.11 15:30
Оценка:
Здравствуйте, artelk, Вы писали:
A>Думаю, если назвать переменные windowHandle и threadHandle, то понятность кода, по крайней мере, не ухудшится.
Это менее удобно при написании.

A>другой пример приведи

//Определения 
  Displayd VAR
//Показать заничение из функции "GetSomeVolum"
  Displayd = GetSomeVolum()                      //Возвращает значение любого числового типа.
  Displayd = Displayd + 5
  Displayd = "Vol_of_GetSomeVolum+5:" + Displayd //Если в "Displayd" тип пользовательский и не описано приведение к char - будет ошибка при компиляции.
  PrintF(Displayd)                               //Хотя в этом простом случае можно было би и так записать: PrintF(("Vol:" + (GetSomeVolum() + 5))) 
//Показать заничение из функции "GetWindowHandle"   
  Displayd = GetThreadHandle()
  /*Делаем что то с "Displayd"*/  
  PrintF(Displayd)
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[11]: Вывод типа переменной
От: WolfHound  
Дата: 05.05.11 15:41
Оценка: +1
Здравствуйте, AlexCab, Вы писали:

A>>Думаю, если назвать переменные windowHandle и threadHandle, то понятность кода, по крайней мере, не ухудшится.

AC>Это менее удобно при написании.
У нормальных людей есть IDE и им пофиг.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Вывод типа переменной
От: любой  
Дата: 05.05.11 15:43
Оценка:
Здравствуйте, AlexCab, Вы писали:

...

А как быть с таким:
SomeFunction(bool b)
{
S VAR //Локальная перменная
//Какой то код
S = 0 //Присваевание числа
if(b)
S = "С" //Присваевание символа
OtherFunction(S);
}
художников никогда не обижал
Re[4]: Вывод типа переменной
От: AlexCab LinkedIn
Дата: 05.05.11 15:58
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Это отговорки.

Нет дело в очерёдности, на данном этапе работы ещё рано.

VD>В наличии меньшего количества переменных нет ничего хорошего. На любом ФЯ можно писать почти совсем без переменных. Но это не значит, что код будет хорошо читаемым.

VD>Так что не надо экономить на спичках. Если переменные нужны, то смело вводи их.
Только если они действительно нужны.

VD>А уж повторное использование имен — это просто глупость.

Согласен.

VD>Ничего мы не знаем. Скорее всего в твоем коде будет море багов и найти их (из-за того, что ты сделал язык дырявым) будет очень не просто.

Свобода vs Порядок — извечное противостояние.

VD>Для изменяемых переменных это опасно.

Для не изменяемых тоже, по значению:
def s = 0
//Какой то большой код в котором где то есть "def s = 1"
/*Код рассчитывающий что s = 0*/

По типу ошибка слоится компилятором в обоих случаях.
Хотя не спорю при более строгих правилах ошибку допустить сложнее(найти в тексте определение проще чем присваивание).
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[5]: Вывод типа переменной
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.05.11 18:55
Оценка:
Здравствуйте, AlexCab, Вы писали:

VD>>Ничего мы не знаем. Скорее всего в твоем коде будет море багов и найти их (из-за того, что ты сделал язык дырявым) будет очень не просто.

AC>Свобода vs Порядок — извечное противостояние.

Это у тебя своеобразная такая свобода. Свобода получать удары током от оголенных проводов.

VD>>Для изменяемых переменных это опасно.

AC>Для не изменяемых тоже, по значению:
AC>
AC>def s = 0
AC>//Какой то большой код в котором где то есть "def s = 1"
AC>/*Код рассчитывающий что s = 0*/
AC>

AC>По типу ошибка слоится компилятором в обоих случаях.

Это теоретические домыслы. На практике никаких проблем нет. Переменные случайно не вводятся.

AC>Хотя не спорю при более строгих правилах ошибку допустить сложнее(найти в тексте определение проще чем присваивание).


Особенно когда тебе помогает IDE. В Немерле когда подводишь мышь к имени, то всего его использования подсвечиваются розовеньким, а определение синеньким. Так что сразу видно, где переменная определена и как используется.

В общем, меняй свои приоритеты, чтобы не заниматься велосиподостроением.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Вывод типа переменной
От: AlexCab LinkedIn
Дата: 06.05.11 07:37
Оценка:
Здравствуйте, любой, Вы писали:
Л>А как быть с таким:
Л> SomeFunction(bool b)
Л> {
Л> S VAR //Локальная перменная
Л> //Какой то код
Л> S = 0 //Присваевание числа
Л> if(b)
Л> S = "С" //Присваевание символа
Л> OtherFunction(S);
Л> }

Если я правильно понял то "S = "С"" а может и не выполнится в зависимости от значения в "b",
так как тип аргументов "OtherFunction"(как и всех остальных функций) строго определён компилятор сможет проверить корректность
типа содержимого "S" и если это возможно привести к нужному типу.

Тик скомпилируется:
SomeFunction(bool b){...}
OtherFunction(char R){PrintF(R)}

Если "b" == 0 то будет выведено "0", иначе "C".

Так нет:
SomeFunction(bool b){...}
OtherFunction(int R){...}

Так как нельзя привести "char" к "int"

Вот как-то так.
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[6]: Вывод типа переменной
От: AlexCab LinkedIn
Дата: 06.05.11 07:54
Оценка:
Здравствуйте, VladD2, Вы писали:
AC>>Свобода vs Порядок — извечное противостояние.
VD>Это у тебя своеобразная такая свобода. Свобода получать удары током от оголенных проводов.
Напишу потому как знаю не понаслышке, доступ к "оголённым проводам" даёт несравнимо больше свободы чем доступ только к панели оператора.

AC>>По типу ошибка слоится компилятором в обоих случаях.

VD>Это теоретические домыслы.
Truth.

AC>>Хотя не спорю при более строгих правилах ошибку допустить сложнее(найти в тексте определение проще чем присваивание).

VD>Особенно когда тебе помогает IDE. В Немерле когда подводишь мышь к имени, то всего его использования подсвечиваются розовеньким, а определение синеньким. Так что сразу видно, где переменная определена и как используется.
Взгляд с этой точки зрения сводит на нет преимущества явного определения и константности переменных. Что мешает IDE интерактивно подсказать
тип значения находящегося в переменной в данный момент(например сразу после ввода имени, при написании текста программы).

VD>В общем, меняй свои приоритеты, чтобы не заниматься велосиподостроением.

Как велосипедостроитель велосипедостроителю, признайте ведь это интересно
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[7]: Вывод типа переменной
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.05.11 08:58
Оценка:
Здравствуйте, AlexCab, Вы писали:

AC>Напишу потому как знаю не понаслышке, доступ к "оголённым проводам" даёт несравнимо больше свободы чем доступ только к панели оператора.


А, ну-ну.

AC>Взгляд с этой точки зрения сводит на нет преимущества явного определения и константности переменных. Что мешает IDE интерактивно подсказать тип значения находящегося в переменной в данный момент(например сразу после ввода имени, при написании текста программы).


Чтобы IDE что-то подсказала ей нужно иметь какие-то ограничения которые она смогла бы проверить. А если ограничений нет, то и подсказать она ничего не может. Мы же можем засунуть в переменную все что угодно!


VD>>В общем, меняй свои приоритеты, чтобы не заниматься велосиподостроением.

AC>Как велосипедостроитель велосипедостроителю, признайте ведь это интересно

Интересно делать новое. А переизобретать старое не очень интересно. Про него можно просто узнать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Вывод типа переменной
От: AlexCab LinkedIn
Дата: 06.05.11 09:13
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Чтобы IDE что-то подсказала ей нужно иметь какие-то ограничения которые она смогла бы проверить.

Возвращаясь к первому посту, достаточно ли в этом случае ограничений, и если нет почему?

VD>Мы же можем засунуть в переменную все что угодно!

В данном случае, только значения любого типа.
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[3]: Вывод типа переменной
От: maxkar  
Дата: 06.05.11 12:40
Оценка:
Здравствуйте, AlexCab, Вы писали:

AC>Спасибо, примерно так я и думал, компилятор может построить граф функции и обойти его проверяя типы, в случае неопределённости

AC>например:
AC>
AC>IF /*Какоето условие*/
AC>    /        \
AC>  S = "C"  S = 0
AC>    \        /
AC>     X = S + 1


Картинка характерная . Посмотрите Static single assignment form. Достаточно много компиляторов используют подобное представление, правда, не для вывода типов.
Re[11]: Вывод типа переменной
От: Sinclair Россия https://github.com/evilguest/
Дата: 10.05.11 03:52
Оценка:
Здравствуйте, AlexCab, Вы писали:
A>>Думаю, если назвать переменные windowHandle и threadHandle, то понятность кода, по крайней мере, не ухудшится.
AC>Это менее удобно при написании.
Главное — удобство при чтении. Написание — очень редкое событие в жизни кода. Ради него можно немножко и постараться.
Код, использующий одну переменную в разных смыслах, вы бы впоследствии опубликовали на тематическом форуме с вопросом "Много ли времени ушло на понимание того, что метод делает".
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: Вывод типа переменной
От: FR  
Дата: 10.05.11 10:11
Оценка:
Здравствуйте, AlexCab, Вы писали:

AC>Примерно так, но и для изменяемых переменных, и без необходимости переопределять(более опасно, более удобно).


Без необходимости переопределять боюсь в статическом жестко типизированном языке не получится, а вот с мутабельными
переменными в ML-образных языках без проблем:
open Printf;;

let s = ref 0;; (* s мутабельная переменная типа int *)
s := 10;; (* присваиваем *)
printf "s = %d\n" !s;;

let s = ref "test";; (* s теперь мутабельная переменная типа string *)
s := "Ok";; (* присваиваем *)
printf "s = %s\n" !s;;
Re[6]: Вывод типа переменной
От: FR  
Дата: 10.05.11 10:26
Оценка:
Здравствуйте, artelk, Вы писали:

A>Одно и то же имя имеет разный смысл в зависимости от позиции внутри функции. Это усложняет понимание.

A>Переопределение удобно только если тип меняется, а смысл переменной остается.
A>Приходит, например, в функцию строковой параметр itemCount. Ты знаешь, что там должно быть число.
A>В начале ф-ии парсишь его и переопределяешь itemCount с типом int:
A>
A>f(itemCount : string) : void
A>{
A>  def itemCount = int.Parse(itemCount);
A>  //тут используем уже как число
A>}
A>

A>Так да, удобно — чтобы лишние имена не плодить со всякими префиксами-постфиксами.
A>Пример, конечно, не очень, но иногда не хватает подобной фичи.

Как раз ML'ный let-биндинг такое легко позволяет:

let f (itemCount:string) = 
  let itemCount:int = int_of_string itemCount in itemCount + 1;;


через 'let' переопределяем itemCount и после 'in' используем.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.