константы (const)

Предыдущая тема Следующая тема Перейти вниз

константы (const)

Сообщение  Eric-S в Чт Авг 28, 2008 7:22 am

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


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

Например если ваша программа использует число pi для своих вычислений, то не будите же вы каждый раз задавать его значение, хотябы и с приблизительной точностью?


3.141 592 653 589 793 238 462 643 383 279 502 884 197 169 399 375 105 820 974 944592 307 816 406286208998628034 825 342 117 067 982 148 086 513282 306 647 093844609 550 582 231 725 359 408 128481117450284102 701 938 521 105 559 644 622948954 930 381 964 428 810 975 665 933 446 128 475648 233786783165271201 909 145648 566 923 460 348 610 454 326 648 213 393 607 260 249 141 273 724 587 006606315588 174881 520 920 962 829 254091 715 364 367 892 590 360 011 330 530 548820 466 521 384 146 951 941511 609 433 057 270 365 759 591953092 186 117 381 932611 793 105 118 548 074462 379 962 749 567 351 885752 724 891 227 938 183 011949129833 673 362Е

уф! Оно даже на одну строчку не влезает! А ведь всего пол тысячи знаков.
Используя же константу, вы зададите число pi в начале программы, один раз, а дальше будете вызывать его по имени, всего из двух символов "PI".
Код:

print "pi = " & PI


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

Код:

Const FirstNumber = 1
Const SecondNumber = 2
Const FirstString = "First string."
Print FirstNumber, SecondNumber ' будет напечатано 1      2
Print FirstString 'This will print First string.
sleep

При необходимости, значению константы можно указать тип данных. Например
Код:

const x as integer = 65412
print x
sleep


Также существуют константные переменные и препроцессорные константы, но о них уже не в этом разделе.



см также:
данные - числовые и строковые
идентификаторы


Последний раз редактировалось: Eric-S (Сб Сен 06, 2008 4:07 am), всего редактировалось 1 раз(а)

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

константы (const)

Сообщение  electrik в Чт Сен 04, 2008 8:06 pm

привет. во FreeBasic есть еще такое понятие как константные переменные, или порусски переменные только для чтения. приветем пример:
dim x as const single = 3.861385243
print x
'x=6.286123 'ошибка компиляции, не возможно записать значение в эту переменную.

еще можно использовать в типах данных:
type mytest
x as single
y as const single = 8.182
end type

dim test as mytest
print test.y
test.y=23.86378 'ошибка компиляции. невозможно модифицировать test.y

можно использовать в функциях и процедурах:
declare function testing(a as const integer) as integer

testing(63123)

function testing(a as const integer) as integer
print a
a=12365 'ошибка компиляции. невозможно модифицировать параметр.
function = 1
end function

подробнее, смотри в английском мануале:
Const (Qualifier)

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 36
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: константы (const)

Сообщение  Eric-S в Чт Сен 04, 2008 11:14 pm

Спасибо. Посмотрю. Поэксперементирую.

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

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

константы (const)

Сообщение  electrik в Сб Сен 06, 2008 12:49 am

привет. я думаю, что это не константы, а всё-таки переменные, но в них именно компилятор, запрещает записывать данные. приведу примеры обычных констант и так называемых переменных только для чтения, а также пример обычной переменной, потом посмотрим что нам выдает бейсиковский ассемблер.
обычная константа.
код бейсика: const a = 19367
print a
sleep
код ассемблера: push 1
push 19367
push 0
call _fb_PrintInt@12
push -1
call _fb_Sleep@4
переменная только для чтения.
код бейсика: dim a as const integer = 76528
print a
sleep
код ассемблера: mov dword ptr [ebp-8], 76528
push 1
push dword ptr [ebp-8]
push 0
call _fb_PrintInt@12
push -1
call _fb_Sleep@4
Обычная переменная.
dim a as integer = 193136
print a
sleep
код ассемблера: mov dword ptr [ebp-8], 193136
push 1
push dword ptr [ebp-8]
push 0
call _fb_PrintInt@12
push -1
call _fb_Sleep@4
вот так.

кстати, константам можно без проблем присваивать тип данных. пример
const x as integer = 65412
print x
sleep
а вообще, если вам не нужно к константе привязывать какой-нибудь тип данных, можно использовать замечательную препроцессор команду
#define
пример: const x = 123, тоже самое что: #define x 123.
но все-таки const и #define, это разные команды, просто #define, подставляет все, что находится после названия идентификатора.
приведем примеры, мы не хотим писать тысяча раз print"hello world", а хотим чтоб это как-то было покороче:
#define hw print "helo world"
hw
hw
hw
hw
hw
sleep
вот вам и пять хело ворлдов. мы создали константу, хотя будет правильней макрос, который облегчает нам барабанить по клаве. вот еще пример:
#define di dim as integer
#define db dim as byte
di test = 7652
db small=135
print test
print small
sleep
вот так можно извратить бейсик, чтоб он был не узнаваем. всеже рекомендую, исходники для публичного использования так не сокращать, они плохо читабельны и понятны только вам. есть такая звуковая библиотека FbSound, там так и сделано, и чтобы в ней разобраться, надо запомнить кучу сокращений.
команда #define, не компилируется в исполняемый файл, это лишь команда компилятора, поэтому можно ей пользоватся без страху, но умеренно, например создавать константы
#define mess "error in exe file"
#define sound_Freq 432
#define SamplePerSec 44100
#define Com1Port &h3f8

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 36
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: константы (const)

Сообщение  Eric-S в Сб Сен 06, 2008 3:40 am

Спасибо за разъьяснения. Я собственно тему констант поднял, чтобы подойти к переменным.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

константы (const)

Сообщение  justar в Сб Сен 06, 2008 8:28 pm

electrik пишет:я думаю, что это не константы, а всё-таки переменные, но в них именно компилятор, запрещает записывать данные.
Какие же тогда это переменные - если их нельзя изменить?
"Переменная" по определению - это изменяемая в ходе работы программы величина

justar

Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 43
Откуда : Кишинёв, Республика Молдоа

Посмотреть профиль

Вернуться к началу Перейти вниз

константы (const)Поиск...

Сообщение  electrik в Вс Сен 07, 2008 5:38 pm

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

Read-only variables must have an initializer since modifying a read-only variable through an assignment will generate a compiler error. The initializer
may appear after the declaration of the variable.

ну не будем марочить голову народу, пусть это будут константы, а мне надо, взять справочник по english, и правильно в мануале прочитать.

electrik

Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 36
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: константы (const)

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения