Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Компилятор не предупреждает об ошибке сравнения переменных String и Integer / 25 сообщений из 32, страница 1 из 2
11.12.2006, 12:02
    #34189671
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub Command1_Click()
Dim var_str As String
Dim var_itg As Integer
var_str = "ТРПР"
var_int =  666 
If var_str <> var_int Then
    MsgBox "НЕ РАВНО"
End If
End Sub
...
Рейтинг: 0 / 0
11.12.2006, 12:16
    #34189729
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
В бэйсике с этим всё в порядке, а вот в дельфе бы такое не прокатило. там бы надо было преобразовывать integer в string.
...
Рейтинг: 0 / 0
11.12.2006, 12:24
    #34189766
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
Только Delphi предупреждает об ошибке?
...
Рейтинг: 0 / 0
11.12.2006, 12:43
    #34189847
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
об ошибке не предупреждает и варинги не дает, а вот если ошибка будет, то тогда вылетит
есть другой вариант - Val

аффтопитезь
...
Рейтинг: 0 / 0
11.12.2006, 12:43
    #34189850
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
кроме delphi и бейсика ничего не пробовала.
пусть напишут те, кто другие языки пробовал.
...
Рейтинг: 0 / 0
11.12.2006, 12:44
    #34189857
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
Настенькакроме delphi и бейсика ничего не пробовала.
пусть напишут те, кто другие языки пробовал.

в других языках сделано гораздо приличней, и долговременная операция конвертации делается только вручную.

а VB- это так..., залетно
...
Рейтинг: 0 / 0
11.12.2006, 13:03
    #34189945
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
Наскольк я знаю, visual basic - это единственный язык который настолько умен.
Правда цена за это - пресловутый оператор Set.
Все другие basic-и, и вообще другие языки сами не выполняют такие сложные преобразования типов.
Даже SQL.
Надо всегда помнить про закулисные преобразования типов и когда потребуется - "помочь" компилятору VB.
Можно бы изучить все правила по которым работают вариантные переменные, но лучше просто приводить явно к одному типу оба операнда в проверке условия.
Строгая типизация языков - это хорошо, но все равно приходится иметь дело с преобразованиями типов которые только в ран-тайме дадут ошибки. Например, преобразовать строку из файла или из контрола в дату или число. У вас могут быть две записи в текстовой строке, хранящие одинаковые данные, но различные по тексту.
...
Рейтинг: 0 / 0
11.12.2006, 13:27
    #34190065
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
Мне бы хотелось, что бы компилятор не дал бы создать exe файл, пока не будут исправлены подобные ошибки. Настенька подсказывает, что Delphi - такой язык. А кроме Delphi ? Какие ещё компиляторы предупредупреждают такие ошибки ?
...
Рейтинг: 0 / 0
11.12.2006, 16:31
    #34190864
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
klen_Мне бы хотелось, что бы компилятор не дал бы создать exe файл, пока не будут исправлены подобные ошибки. Настенька подсказывает, что Delphi - такой язык. А кроме Delphi ? Какие ещё компиляторы предупредупреждают такие ошибки ?

великий и ужасный си.
(если ты вообще понимаешь, что пишешь, то рабооать будет)
...
Рейтинг: 0 / 0
11.12.2006, 16:36
    #34190891
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
А С ++?
...
Рейтинг: 0 / 0
11.12.2006, 17:21
    #34191091
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
klen_А С ++?

см. пост выше

паскаль еще (но делфя - его следующая модель эволюции)
...
Рейтинг: 0 / 0
11.12.2006, 18:32
    #34191366
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
klen_

Если поставить Option Explicit, то сразу окажется, что вы забыли отдекларировать переменную var_int.

Отдекларируйте ее, и тогда Компилятор сразу начнет предупреждать об ошибке сравнения переменных String и Integer:

Run-time error '13':
Type mismatch.

Настенька,

В бэйсике с этим всё в порядке, но не в том смысле, как вы думаете.

Всем успехов.

VladConn
...
Рейтинг: 0 / 0
11.12.2006, 21:13
    #34191656
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
VladConnОтдекларируйте ее, и тогда Компилятор сразу начнет предупреждать об ошибке сравнения переменных String и Integer:Эээ... Option Explicit отвечает все-таки за обязательную декларацию, но никак не за сравнение.
...
Рейтинг: 0 / 0
11.12.2006, 22:54
    #34191781
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
Ну и что?

Там товарищ выдавал Variant за Integer, не осознавая этого, как раз из-за отсутствия Option Explicit. И сравнение проскальзывало без проблем как раз из-за отсутствия Option Explicit. Ведь Variant принимает любой тип. Т.е. косвенно именно отсутствие Option Explicit привело к невыявлению ошибки несоответствия типов. Несоответствия типов просто не было . А с Option Explicit было бы. И какая разница: в процессе сравнения или вычитания со сложением.

Visual Basiс может простить какую-то небрежность при, например, конкатенации строк и чисел, преобразуя "сумму" в новую строку, это да. Меня лично такая небрежность раздражает, и я всегда стараюсь преобразовывать типы сам, не полагаясь на компилятор. По-крайней мере, это демонстрирует осознанность действий кодирующего и его сознательность. По этой же причине я никогда не использую знак "+" при конкатенации строк, а только "&". Tогда если попадутся числа, а не строки, пусть по очень маловероятной причине, то сложения не произойдет.

VladConn
...
Рейтинг: 0 / 0
12.12.2006, 05:21
    #34191969
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
мне вот этот option explicit вообще раздражает.
надо все переменные объявлять. без него всё хорошо работает.
вспоминаю дельфю, делали курсовик по математике, так там floattostr, strtofloat, inttostr, strtoint были чуть ли не в две строки. выглядело всё очень некрасиво и нечитаемо.
...
Рейтинг: 0 / 0
12.12.2006, 07:38
    #34192020
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
VladConnЕсли поставить Option Explicit, то ...
Указал
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Option Explicit
Private Sub Command1_Click()
Dim var_str As String
Dim var_itg As Integer
var_str = "ТРПР"
var_itg =  666 
If var_str <> var_itg Then
    MsgBox "НЕ РАВНО"
End If
End Sub
Одна ошибочка исправилась, а на сравнение компилятор как не ругался, так и не ругается.
...
Рейтинг: 0 / 0
12.12.2006, 08:04
    #34192048
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
Прекрасно он ругается, пишет type mismatch - несовпадение типов.
сейчас то что не так?
...
Рейтинг: 0 / 0
12.12.2006, 09:54
    #34192235
Melkiades
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
Настенькамне вот этот option explicit вообще раздражает.

5 баллов!

Worobjoff
Все другие basic-и, и вообще другие языки сами не выполняют такие сложные преобразования типов.
Даже SQL.
Вы не правы, T-SQL тоже выполняет сам такие преобразования. А вот PL/SQL - нет.

klen_Настенька подсказывает, что Delphi - такой язык.
Настенька ошибается, Delphi - это не язык, а среда программирования.
...
Рейтинг: 0 / 0
12.12.2006, 10:41
    #34192384
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
VladConnНу и что?

Там товарищ выдавал Variant за Integer, не осознавая этого, как раз из-за отсутствия Option Explicit. И сравнение проскальзывало без проблем как раз из-за отсутствия Option Explicit. Ведь Variant принимает любой тип. Т.е. косвенно именно отсутствие Option Explicit привело к невыявлению ошибки несоответствия типов. Несоответствия типов просто не было. А с Option Explicit было бы. И какая разница: в процессе сравнения или вычитания со сложениемТогда уж объявить как Integer , а не просто объявить . ;)
...
Рейтинг: 0 / 0
12.12.2006, 12:57
    #34192955
klen_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
Я говорю, компилятор не ругается, когда создаю exe файл - не ругается. А то что в момент выполнения выходит сообщение type mismatch это уже любой язык, среда, интерпретатор, об этом скажет.
...
Рейтинг: 0 / 0
12.12.2006, 13:04
    #34192987
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
А откуда компилятору знать какой диапазон значений может принять переменная? Может сравнение прокатит: 111 = "222"; а может и нет: 111 = "ааа".
...
Рейтинг: 0 / 0
12.12.2006, 14:11
    #34193319
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
Melkiades ошибается, Delphi - это именно язык, по крайней мере, производитель несколько лет об этом говорит.

klen_,
Вообще разговор бессмысленный. У каждого языка свои правила преобразования типов, чем сложнее язык, тем сложнее правила. У VB они простые. ПишИте на Аде, там проверки типов жестокие. :)
...
Рейтинг: 0 / 0
12.12.2006, 16:00
    #34193805
Melkiades
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
БенедиктMelkiades ошибается, Delphi - это именно язык, по крайней мере, производитель несколько лет об этом говорит.

Прошу прощения, мы оба оказались правы. Просто я перестал следить за Borland.

Delphi — язык программирования, ранее известный как Object Pascal,
разработанный фирмой Borland и изначально реализованный в её пакете Borland Delphi,
от которого и получил в 2003 году своё нынешнее название.
По сути является наследником языка Pascal с объектно-ориентированными расширениями.
...
Рейтинг: 0 / 0
12.12.2006, 16:13
    #34193871
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
Antonariy:

"...Тогда уж объявить как Integer , а не просто объявить. ;) ..."

Так само собой. Здесь же форум по VB, а не домохозяек.

Настенька:

"...мне вот этот option explicit вообще раздражает.
надо все переменные объявлять. без него всё хорошо работает...
"

Вы много потеряли в моих глазах, Настенька. Вы вот еще без тормозов машину поводите. С ними так все тормозится...

:0)

VladConn
...
Рейтинг: 0 / 0
12.12.2006, 16:33
    #34193973
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Компилятор не предупреждает об ошибке сравнения переменных String и Integer
"... А откуда компилятору знать какой диапазон значений может принять переменная? Может сравнение прокатит: 111 = "222"; а может и нет: 111 = "ааа "."

Компилятор конечно такого знать не может. Но вот сама среда, где пишется код, в принципе должна бы не допускать смешения типов. Здесь klen_ прав. И Microsoft в курсе этого пробела. В VB.NET добавлена Option Strict On, что и заполняет досадный пробел. Вот что там происходит как только впечатывается код: Option Strict On disallows implicit conversions from 'String' to 'Double'.

Но это уже не для Настеньки ;0)
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Компилятор не предупреждает об ошибке сравнения переменных String и Integer / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]