Что это может значить для разработчика? Это значит, что язык взял свойства языка-предка, добавил туда свои фичи, постарался исправить свои недочеты и вуаля! Новый мега-понтовый язык уже готов. Стойте, я сказал недочеты? Да, недочеты. Это, блин, все равно, что взять черную ладу, покрасить в белый свет, поставить туда значок мерседеса и надеяться, что он вдруг станет белым мерином.
Вот простейший пример: есть алфавит, преимущественно латинский, но с добавлением новых букв типа буквы ı (читается как русская ы). Есть правила преобразования, к примеру, предыдущая буква должна трансформироваться в старую добрую i. Дана строка, даны правила преобразования, нужно написать функцию, возвращающую преобразованную строку.
Казалось бы, что проще:
string ret = "";
for (int i = 0; i < str.length; ++i) {
char ch = str[i];
//тут правила преобразования
if (ch == 'ı') {
ch = 'i';
}
ret += ch;
}
return ret;
ну... примерно так должна выглядеть функция на шарпах(почти символ в символ в джаве). Да, его нужно выписать в функцию, выписать правила преобразования в отдельную структуру данных, но дело не в этом.
Код вполне себе читабелен, не нужно писать поэму, чтобы объяснить компилятору, что ты хочешь сделать.
Строки в сях всегда таили в своих глубинах подводные камни, таким же образом они перекочевали в виде новых фич в objective c.
Перед тем, как я покажу код на языке яблочников, я объясню, в чем будет различие в плане реализации.
- Самое главное отличие - это юникодные char-ы. Если чары в джаве уже юникодные и никаких проблем с сравниванием у нас нет, то в сях == мы уже не можем поставить. Хотя поставить-то поставим, только никакой гарантии, что будет работать, у нас нет.
- В objective С к NSMutableString можно добавлять только NSString! Чуваки, на дворе 21 век, почему я должен писать много кода, чтобы попросту работать со строками? Я как ленивый человек, стараюсь делать как можно телодвижений для достижения своей цели и никак не считаю это своим недостатком. Разве сложно предоставить хотя бы аналог stl-ных строк? Слава богу, хотя бы метод appendFormat оставили.
Ну соответсвено, сам код:
NSMutableString* str = [[NSMutableString alloc] init];
NSUInteger len = [word length];
NSUInteger i;
for (i = 0;i < len; ++i) {
unichar ch = [word characterAtIndex:i];
if (ch == 'i') // тут правила, я устал копипастить эту букву
ch = 'i';
[str appendFormat:@"%c", &ch];
}
return str;
Хотя согласен, переборщил с негативом. Код не так уж сильно и пахнет, надо только привыкнуть писать под него. Кто знает, как бороться с unicode char-ами?
Комментариев нет:
Отправить комментарий