|
Custom Enumeration в 12 билдере
|
|||
---|---|---|---|
#18+
Пара простых вопросов юзающим PB12: Правда ли, что константы, являющиеся полями пользовательского перечисления, могут быть только типа integer? Например, как здесь: Код: plaintext 1. 2. 3. 4. 5.
Прочитал это где-то в интернете, да с трудом верится. И второй вопрос: здесь написано, что Custom Enumeration введены только в PB12.NET, но не в Классик ("With PB.Net, you now have the capability to define your own enumerations, and they behave exactly like the built-in system enumerations you already know and love..."). Так ли это? Тоже не очень верится. Thanx! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2011, 04:44 |
|
Custom Enumeration в 12 билдере
|
|||
---|---|---|---|
#18+
UrsegoПара простых вопросов юзающим PB12: Правда ли, что константы, являющиеся полями пользовательского перечисления, могут быть только типа integer? Например, как здесь: Код: plaintext 1. 2. 3. 4. 5.
Прочитал это где-то в интернете, да с трудом верится. И второй вопрос: здесь написано, что Custom Enumeration введены только в PB12.NET, но не в Классик ("With PB.Net, you now have the capability to define your own enumerations, and they behave exactly like the built-in system enumerations you already know and love..."). Так ли это? Тоже не очень верится. Thanx! 1) Нет ничего удивительного, что перечисление основывается только на целочисленном типе. В большинстве языков где есть перечисления это именно так. 2) На самом деле зачатки пользовательских перечислений были с PB6 http://www.sql.ru/forum/actualthread.aspx?tid=194606 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2011, 14:20 |
|
Custom Enumeration в 12 билдере
|
|||
---|---|---|---|
#18+
1) Enumeration - это удобный (и к тому-же type safe!) способ хранения констант, когда константы одной группы ("семейства") хранятся в одном типе. Создаваемые нами в повседневной работе константы обычно служат для манипуляций с данными (кодами), извлечёнными из базы данных, и их типом данных часто служат не-числовые типы. Например, в оракловской аппликации, с которой я сейчас работаю, все статусы и коды - CHAR(1) и VARCHAR2 различных длин (т.е. нужны соответственно char и string в PB). Поэтому было бы естественным разрешить любой тип данных в качестве типа данных констант, входящих в enumeration (другое дело, что все константы перечисления должны принадлежать одному типу). 2) Спасибо за интересную ссылку - поиграюсь на работе! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2011, 19:27 |
|
Custom Enumeration в 12 билдере
|
|||
---|---|---|---|
#18+
Ursego1) Enumeration - это удобный (и к тому-же type safe!) способ хранения констант Я знаю более удобный способ хранения констант - в константах. Создать класс, в разделе инстанс переменных которого объявить константы нужного типа и значения. А потом в коде использовать нотацию ClassName.ConstName А type-safe - это вы выдаете желаемое за действительное, если при этом вам важно какое конкретно значение будет в константах перечисления, т.к. после приведения значения от типа перечисления к другому типу весь этот контроль типов накрывается медным тазом. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2011, 22:42 |
|
Custom Enumeration в 12 билдере
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyЯ знаю более удобный способ хранения констант - в константах. Создать класс, в разделе инстанс переменных которого объявить константы нужного типа и значения.Это именно то, что пауэрбилдерщики делают уже много лет из-за неимения custom enumerations. Видимо, Вы называете этот способ удобным потому, что нам всегда кажется удобней то, что привычней. Anatoly MoskovskyА потом в коде использовать нотацию ClassName.ConstNameВот из-за этого и рождаются порой уродцы вроде gnv_const.ORDER_STATUS_CLOSED вместо элегантного order_status.Closed! Конечно, можно для каждой группы констант создавать собственный NVO (я даже могу схавать то, что в PBL-ях будет больше классов), тогда код будет не менее элегантным, чем с перечислением (lnv_order_status.CLOSED), но вот проблему безопасности типов это никак не решает (кроме того, не встречал подобного подхода ни в одной аппликации - сейчас вот для интереса использовал его, жду code review). Anatoly MoskovskyА type-safe - это вы выдаете желаемое за действительное, если при этом вам важно какое конкретно значение будет в константах перечисления, т.к. после приведения значения от типа перечисления к другому типу весь этот контроль типов накрывается медным тазом.Type safety существует чтоб уберечь разработчика от ошибок, а не чтоб стеречь кошелёк от грабителей. А обойти можно всё, что угодно (если так рассуждать, то и инкапсуляция - туфта, ведь можно пойти в потребляемый класс и изменить private и public). Просто если функция принимает в качестве параметра (или возвращает) статус заказа (хранимый в базе данных как строка), то я бы предпочёл иметь дело с типом order_status, а не string (ведь в последнем случае можно передать любые коды, а не только статусы заказа). Ну и замечу, что для меня это отнюдь не вопрос из важных - так, балуюсь, экспериментирую. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2011, 02:18 |
|
|
start [/forum/topic.php?fid=15&fpage=18&tid=1335647]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 260ms |
total: | 395ms |
0 / 0 |