sign писал(а):Да неужели! Я только на вскидку сразу увидел под двадцать однозначно понятных функций.
а я наглядно объясню! Функций Pos - всего 30 в списке. из них 6 (а не 5 как я раньше писал), которые явно указывают на назначние параметров: "substr" и "source". Названия, вроде "c" и "v" мне кажутся не информативными вообще - неясно их назначение. (Список прилагаю, где опиясния Pos посчитаны и + помечены хорошие)
Например, из этого описания, нифига не ясно ни что функция делает, ни что параметры обозначают. Так же из Pos.
- Код: Выделить всё
function ReplaceStringWithAdvance(const c: string; w: Boolean; v: variant): Boolean;
Опытные программисты (sign) просто "знают", что "substr" идёт первым
... соответственно неопытные (h**st) ещё не привыкли
Кроме ctrl+space, есть ещё и замечательноая контекстная помощь ctrl+shift+space. Которая при вводе параметров, перечислит возможные варианты типов. К сожаленю, результат её работы хуже, чем у Ctrl+space. Т.к. нету ни одной функции с информативными параметрами. (скриншот приалагаю). Обращаю в нимание, что в одним описание идёт Pos( v, w) а в другом Pos(w, v)... т.е. имени переменной верить ну никак нельзя
---
но это только с наименованием пременных такое веселье.
по-моему личному мнению, что такое обилие разных функций может стильно вогнать в ступор особенно новичков.
читаем описания функции"Search for substring in a string."
Казалось бы задачя простая, а функций 30. Новичёк не поймёт не сразу, но опытные люди (опять sign и hinst) знают - чтобы избежать спорных конвертаций типов.
Приведение выполняется явно в каждой реализации функции pos (см. systemh.inc, astrings.inc, wstringh.inc).
Ведь для выполнения:
- Код: Выделить всё
Pos('a', 'aaa');
- Код: Выделить всё
Pos('aa', 'aaa');
вызваются две разные функции! (в первом случае Char, во втором ShortString). Но с точки зрения пользователя (программиста), задача одна и таже - поиск подстроки в строке...
ну и конечно, если была бы всего одна функция Pos(const substr, source: string) - она тоже бы работала для всех случаев (просто не так эффективно).
Спасибо паскалю за неявное преведение строковых типов друг к другу.
Ну и самый интересный Вариант, это такой:
- Код: Выделить всё
uses ..Variants..
if Pos(1, $A0)>0 then writeln('found');
и ведь работает!
строгая типизация! строгая типизация!
У вас нет необходимых прав для просмотра вложений в этом сообщении.