?

Log in

No account? Create an account
entries friends calendar profile My Website Previous Previous Next Next
О том, что огорчает - Уголок Школьника
scolar
scolar
О том, что огорчает
Всё-таки люди, проектирующие API, должны быть перфекционистами.

Вот, скажем, что может быть проще строки - указатель себе и указатель - в дотнете? Есть у неё полезный метод Trim() - убирает с обеих сторон то, что считает пробелами, а пробелами она считает то, на что кивает функция Char.IsWhiteSpace(char) - и правда, не писать же в середине начала XXI века два цикла на коленке. Для тех, кому надо убрать что-то своё есть вариант, принимающий массив "пробелов": Trim(Char[]). Пока что с дизайном всё в порядке.

Далее, в голову дизайнера приходит, что обрезать иногда бывает надо не с обоих концов, а только с одного. И в API появляются напрашиваюшиеся метода TrimStart и TrimEnd. Вот только нам никогда уже не узнать, что было в голове у того, кто это проектировал, и почему были добавлены только TrimStart(Char[]) и TrimEnd(Char[]), а аналогов Trim() без параметров не добавили.

Правда, если почитать документацию, то оказывается, что если в качесиве массива передать null, то произойдёт то, что нужно. То есть Trim() это эквивалент Trim(null).

Интересно, сколько десятков тысяч программистов уже написали в середине начала XXI века что-то типа:
int i = s.Length - 1;
while (i >= 0 && Char.IsWhiteSpace(s[i]))
  i--;
s = s.Substring(0, i + 1);
А сколько ещё сотен тысяч решили в середине начала XXI не заморачиваться, и передали в имеющиеся методы массив из одного пробела?
6 comments or Leave a comment
Comments
From: vasya_iz_aa Date: March 5th, 2010 03:18 am (UTC) (Link)
В любимой системе было для этого два строковых метода, Trim() и Strip() . Всегда было любопытно по какому принципу было решено, как называть тот из них, который менял состояние строки.
From: vasya_iz_aa Date: March 5th, 2010 04:47 am (UTC) (Link)
Description

Creates a new string object with a string consisting of the current object's string with leading and/or trailing spaces removed.

Prototype

WString Strip( WBool fromBeg=TRUE,
WBool fromEnd=TRUE ) const;

Return

Returns a new string object. If both fromBeg and fromEnd are FALSE the new object's string will be empty.

Parameters

fromBeg
If TRUE, leading spaces will be removed.
fromEnd
If TRUE, trailing spaces will be removed.

Notes

To perform this operation on the current object's string use the Trim method.
(Deleted comment)
scolar From: scolar Date: March 5th, 2010 04:36 am (UTC) (Link)
Ага, понял: null можно опустить. Тогда наоборот, зачем нужен overload для Trim?
topcoderer From: topcoderer Date: March 5th, 2010 04:46 am (UTC) (Link)
Trim() совершенно безполезен.
Наверно это и есть ошибка разработчиков интерфейса :-)
topcoderer From: topcoderer Date: March 5th, 2010 04:51 am (UTC) (Link)
Случайно удаленный коммент (может будет кому-нибудь полезен):
TrimStart и TrimEnd методы используют массив char параметров. Если передан пустой массив параметров или null, то используется стандартный WhitespaceChars. Так что и TrimStart(), и TrimEnd() работают так как и ожидается. Просто запись выбрана более компактная. И это правильно.

P.S: Trim(params char[]) работает так же.
6 comments or Leave a comment