Проверки i18n

Предпосылка и причины просты в понятии.

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

C++ не требует RAII, но все больше признается, что использование методы RAII произведет больше устойчивого кода.

причина, что RAII полезен в C++, состоит в том, что C++ внутренне справляется с созданием и разрушением переменных, как они вводят и оставляют объем, текут ли через нормальный код или посредством раскручивания стека, инициированного исключением. Это - бесплатный набор в C++.

Путем связи всей инициализации и очистки к этим механизмам, Вы обеспечены, тот C++ будет заботиться об этой работе для Вас также.

Разговор о RAII в C++ обычно приводит к обсуждению интеллектуальных указателей, потому что указатели особенно хрупки когда дело доходит до очистки. Когда управление памятью типа "куча" получило от malloc или новый, это обычно - обязанность программиста освободить или удалить ту память, прежде чем указатель будет уничтожен. Интеллектуальные указатели будут использовать философию RAII, чтобы гарантировать, что выделенные объекты "кучи" уничтожаются любое время, переменная указателя уничтожается.

15
задан 4 revs, 2 users 98% 14 October 2010 в 01:06
поделиться

5 ответов

Есть огромная разница между простой и полной проверкой. Часто невозможно полностью стандартизировать валидацию для разных регионов. Вот несколько примеров:

  • CivilID / SSN и т. Д. Номера могут разрешать / запрещать заменяющие значения (специфичные для системы), внешние значения, исторические значения и т. Д. У нас есть 2 разных валидации системы в одном из наших приложений для того же поля, в зависимости от контекста, а другие ИТ-системы могут иметь другие системы проверки.

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

  • Телефонные номера имеют аналогичную проблему. Разрешаете ли вы дорогие номера, номера мобильных телефонов? Как вы их обнаруживаете?

Вы можете возразить, что простая проверка возможна в большинстве случаев, но для простой проверки часто проще использовать сопоставление с образцом и позволить местному отделу на каждом рынке определять действительные образцы.

Также существует проблема с контрактом на обслуживание программного обеспечения. Если вы покупаете программное обеспечение и хотите использовать его в течение 5 лет, очень важно, чтобы вы могли изменить правила проверки, если что-то изменится. Я испытал 4 изменения системы телефонных номеров в моей стране, которые повлияли на простую проверку, такую ​​как «количество цифр» и «какая может быть первая цифра».

Таким образом, лучшее решение - иметь централизованную базу данных с локальными параметрами. специфические узоры,

1
ответ дан 1 December 2019 в 05:31
поделиться

Википедия собирает информацию о номерных знаках по странам. То же самое для почтовых индексов .

0
ответ дан 1 December 2019 в 05:31
поделиться

Груша неплохая. Например, у валидатора для Новой Зеландии есть всевозможные полезные вещи, такие как почтовые индексы, номера IRD, номера телефонов, номера банковских счетов. http://pear.php.net/manual/en/package.validate.validate-nz.php

Он все еще находится в альфа-версии, но охватывает довольно много стран. Может, стоит пересмотреть?

1
ответ дан 1 December 2019 в 05:31
поделиться

Ну, я думаю, что все, что нужно, - это один программист из этой страны и пара дней для повторного поиска и написания проверок .. ничего особенного .. + в википедии есть масса информации

0
ответ дан 1 December 2019 в 05:31
поделиться

AppController.h:

@interface AppController : NSObject
{
        int fido;
}

@property (readonly, assign) int fido;
@end

import "AppController.h"

@implementation AppController
@synthesize fido;
...
@end

На этом этапе вы объявили, что AppController имеет метод -fido , и вы синтезировали этот метод. Не существует метода -setFido: . Итак, почему следующая «работа»?

- (id)init
{
        if (self=[super init]) {
            [self setValue:[NSNumber numberWithInt:5] forKey:@"fido"];
            NSNumber *n = [self valueForKey:@"fido"];
            NSLog(@"fido = %@", n);
        }
        return self;
}

(Кстати: я исправил ваш -init для реализации правильного шаблона)

Это работает, потому что KVC следует эвристике для установки или получения значения. Вызов -setValue: forKey: сначала ищет -setFoo: . Если не найден, он затем ищет переменную экземпляра foo и устанавливает ее напрямую.

Обратите внимание, что если вы измените переменную экземпляра fido на _fido , комплект будет работать, у них тоже замечательный api

0
ответ дан 1 December 2019 в 05:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: