Присвоение в сложной структуре
Участников: 4
FreeBasic :: Программирование :: Общее
Страница 1 из 1
Присвоение в сложной структуре
Подскажите, пожалуйста, как в
- Код:
Type v3
As Double x,y,z
End Type
Dim H as v3
H.x=1:H.y=55:H.z=0.547
Gena- Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 30
Откуда : Москва
Re: Присвоение в сложной структуре
H = type(1, 55, 43.44)
или
H = type<v3>(1, 55, 43.44)
или
H = type<v3>(1, 55, 43.44)
DiG. GeRR- Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 32
Откуда : Рудный, Казахстан
Re: Присвоение в сложной структуре
Угловые скобочки?.. А это ещё что за хрень?
Так же можно использовать конструкцию
[/code]
with h1
.x = 1
.x = 6
.z = 0
end with
[/code]
Так же можно использовать конструкцию
[/code]
with h1
.x = 1
.x = 6
.z = 0
end with
[/code]
Re: Присвоение в сложной структуре
Угловые скобочки?.. А это ещё что за хрень?
Та самая! http://www.freebasic.net/wiki/wikka.php?wakka=KeyPgTypeTemp И главное, отлично работающая!
А With - разве это короче?
DiG. GeRR- Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 32
Откуда : Рудный, Казахстан
Re: Присвоение в сложной структуре
DiG. GeRR пишет:
А With - разве это короче?
В данном случае действительно без разници.
Но Когда структура большая. А её имя длинное или составное, то with ещё как сокращает код.
Ну а свойства или методы по именам всё же удобнее, чем по их позиции.
Пытался в C++ найти похожее, но не нашол.
Некоторые критикуют, мол вносит неясность, но если аккуратно, то мне очень даже нравиться.
Re: Присвоение в сложной структуре
и все же это ближе к
что-то типа H={1,55,0.547}
DiG. GeRR- Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 32
Откуда : Рудный, Казахстан
Re: Присвоение в сложной структуре
Спасибо, работает !
Gena- Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 30
Откуда : Москва
Re: Присвоение в сложной структуре
очень красивый ход. причем в ассемблере не отличается, тоесть две записи в асм коде будут одинаковы.
test.x=123
test.y=21
test=type(123,21)
а вот with, я не люблю. во FreeBasic, with построен так. берется адрес начала типа, пишется значение по этому адресу, для следующего элемента, берется адрес начала типа+размер элемента типа, и пишется туда и так далее.
вот два кода на Freebasic и ассемблере.
код на асме
вот так. конечноже тут есть своя тема с постоянным получением адреса. могут написать так:
with test
.x=1
print .x
вот именно другие функции могут изменить регистр eax, поэтому приходиться для каждого элемента получать начальный адрес.
если помудрить с синтаксическим анализатором, этого можно избежать. если между элементами вставляется какая-нибудь функция, адрес получать, если же идет все подряд типа
.x=1
.y=21
тогда достаточно работать с eax.
а вообще лучше всего, обрабатывать with так, как будто мы написали напрямую
test.x=1
test.x=123
test.y=21
test=type(123,21)
а вот with, я не люблю. во FreeBasic, with построен так. берется адрес начала типа, пишется значение по этому адресу, для следующего элемента, берется адрес начала типа+размер элемента типа, и пишется туда и так далее.
вот два кода на Freebasic и ассемблере.
- Код:
type a
x as integer
y as integer
end type
dim test as a
test.x=1
test.y=21
test=type(1,21)
with test
.x=1
.y=21
end with
код на асме
- Код:
mov dword ptr [ebp-12], 1 ; test.x=1
mov dword ptr [ebp-8], 21 ; test.y=21
;запись типа test=type(1,21)
mov dword ptr [ebp-12], 1
mov dword ptr [ebp-8], 21
; здесь начинается with test
lea eax, [ebp-12] ; получим адрес начала типа
mov dword ptr [ebp-24], eax ' сохраним этот адрес в переменной
mov eax, dword ptr [ebp-24] ; зачем-то его прогрузим в eax
mov dword ptr [eax], 1 ; запишем по адресу test.x значение 1
mov eax, dword ptr [ebp-24] ' прочитаем адрес начала типа из переменной
mov dword ptr [eax+4], 21 ; запишем по адресу test.y значение 21
вот так. конечноже тут есть своя тема с постоянным получением адреса. могут написать так:
with test
.x=1
print .x
вот именно другие функции могут изменить регистр eax, поэтому приходиться для каждого элемента получать начальный адрес.
если помудрить с синтаксическим анализатором, этого можно избежать. если между элементами вставляется какая-нибудь функция, адрес получать, если же идет все подряд типа
.x=1
.y=21
тогда достаточно работать с eax.
а вообще лучше всего, обрабатывать with так, как будто мы написали напрямую
test.x=1
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Присвоение в сложной структуре
С with не всё так просто.
Хотя наверное стоит поковыряться с ним по ближе в компилере.
Только это не в лексическом анализаторе, а уже в построителе кода.
Лексический анализатор всего лишь выбирает лексемы. Т.е. слова, комментарии, пробелы, цифры и строки в кавычках.
Что же касаеться with. То он расчитывался для более гружоных вещей. Например
Очень бы хотелось посмотреть на такой расклад. Ведь в коде писать такое, это же
А мне попадались как-то конструкции ещё более накрученные.
document->body->GetElementById("123")->element->attribs->GetAttrib("aaa")
Или что-то такое, но не менее гружоное.
А ведь тут по указателям прыгать туда-сюда...
И что, вот такую прелесть дублировать двадцать раз?
Хотя наверное стоит поковыряться с ним по ближе в компилере.
Только это не в лексическом анализаторе, а уже в построителе кода.
Лексический анализатор всего лишь выбирает лексемы. Т.е. слова, комментарии, пробелы, цифры и строки в кавычках.
Что же касаеться with. То он расчитывался для более гружоных вещей. Например
- Код:
type coord
x as integer
y as integer
z as integer
end type
type base
c as coord
end type
dim base_element as base ptr
base_element = new base()
with base_element->c
.x = 123
.y = 456
.z = 0
end with
Очень бы хотелось посмотреть на такой расклад. Ведь в коде писать такое, это же
- Код:
base_element->c.x = 123
base_element->c.y = 456
base_element->c.z = 0
А мне попадались как-то конструкции ещё более накрученные.
document->body->GetElementById("123")->element->attribs->GetAttrib("aaa")
Или что-то такое, но не менее гружоное.
А ведь тут по указателям прыгать туда-сюда...
И что, вот такую прелесть дублировать двадцать раз?
Re: Присвоение в сложной структуре
если писать простую программу, даже с окнами windows, можно и with.
если драйвер, или на асме, или повторяй по 30 раз.
хотя смотря какие окна. если там выводится крутая графика, которой надо чуть не geforce 9800, тогда повторяй. но это так, тупой пример.
да я думаю, что ты и без меня это знаешь. всегда приходится чем-то жертвовать, либо понятным исходником, либо скоростью кода.
если драйвер, или на асме, или повторяй по 30 раз.
хотя смотря какие окна. если там выводится крутая графика, которой надо чуть не geforce 9800, тогда повторяй. но это так, тупой пример.
да я думаю, что ты и без меня это знаешь. всегда приходится чем-то жертвовать, либо понятным исходником, либо скоростью кода.
electrik- Сообщения : 391
Дата регистрации : 2008-09-02
Возраст : 43
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург
Re: Присвоение в сложной структуре
Вообщем-то да.
Я просто ещё размышляю, как оптимизировать код для своего компилера.
И вот всё что здесь пишеться может быть важным.
Я просто ещё размышляю, как оптимизировать код для своего компилера.
И вот всё что здесь пишеться может быть важным.
FreeBasic :: Программирование :: Общее
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|