avva: (Default)
[personal profile] avva
Будет интересно только программистам, знакомым с C++.

Кроме обычных вещей, которых мне не хватает, когда я пишу на C++ (ну, типа, защитного шлема, чтоб биться головой об стенку было не так больно) мне очень не хватает метода std::string, который был бы точной противоположностью empty(). Потому что писать в двухтысячный раз if (!сепулька.empty()) подзадолбало, если честно. Ведь дело не в том, что этот ! - лишний знак на экране, а в том, что это пусть крохотный, но каждый раз дополнительный логический прыжок в голове.

Любопытно: я, конечно, понимаю, что можно написать if(сепулька.size()) и это будет правильно работать, но что-то мне не позволяет так писать - видимо, ощущение того, что это слишком C-шная идиома. Ну а написать if(сепулька.size() > 0) - это уже выйдет лекарство хуже болезни.

Нет, хочется именно метода, возвращающего bool и в точности обратного empty(). Но вот незадача - размышляя об этом, я осознал, что не понимаю даже, как он должен называться. Не назвать же его, в самом деле, full(). Понятно, что nonempty() - это опять-таки схоластика. А что тогда? Кажется, тут не только в стандарте C++, тут в языке налицо определенная дырка.
Page 1 of 2 << [1] [2] >>

Date: 2008-03-29 02:35 am (UTC)
From: [identity profile] xirax.livejournal.com
occupied()
taken()
:D

Date: 2008-03-29 02:41 am (UTC)
From: [identity profile] moon-aka-sun.livejournal.com
.ok()
.good()
.kosher()

Date: 2008-03-29 02:45 am (UTC)
From: [identity profile] avva.livejournal.com
Ну это просто какая-то дискриминация пустых строк получается.

(no subject)

From: [identity profile] moon-aka-sun.livejournal.com - Date: 2008-03-29 04:05 am (UTC) - Expand

(no subject)

From: [identity profile] fyysik.livejournal.com - Date: 2008-03-29 09:29 am (UTC) - Expand

(no subject)

From: [identity profile] ygam.livejournal.com - Date: 2008-03-29 04:04 am (UTC) - Expand

(no subject)

From: (Anonymous) - Date: 2008-03-29 06:55 pm (UTC) - Expand

Date: 2008-03-29 02:49 am (UTC)
From: [identity profile] watkin.livejournal.com
Лучше fullofit

Date: 2008-03-29 03:01 am (UTC)

Date: 2008-03-29 03:01 am (UTC)
ext_615659: (Default)
From: [identity profile] akuklev.livejournal.com
Эта проблема красиво решается Перловым оператором unless(str.empty()). Особые извращенцы даже вводят его «в язык» подходящим #define'ом.

Date: 2008-03-29 04:09 am (UTC)
From: [identity profile] moon-aka-sun.livejournal.com
Unless, по-моему, это вообще ужас. Не знаю, как у тех, кто впитал это с молоком матери, а мне всегда приходится переводить это в уме в "если не" и проводить дальнейшие преобразования.

(no subject)

From: [identity profile] madfire.livejournal.com - Date: 2008-03-30 12:41 pm (UTC) - Expand

Date: 2008-03-29 03:13 am (UTC)
From: [identity profile] samlazy.livejournal.com
1)
sepulka.here()

2)
sepulka.ThereIs()

Date: 2008-03-29 03:18 am (UTC)
From: [identity profile] max630.livejournal.com
я обычно пишу x == "", x != ""

Date: 2008-03-29 03:48 am (UTC)

Date: 2008-03-29 04:01 am (UTC)
From: [identity profile] a-bronx.livejournal.com
или defined()

Я, кстати, всегда стараюсь выносить все эти предикаты в глобальные функции, потому как обилие строковых типов и способов их проверки задалбывает. Проще всегда и везде писать if (empty(str)) { ... } не заботясь о реальном типе строки.

Date: 2008-03-29 04:13 am (UTC)
From: [identity profile] cema.livejournal.com
А пусть как в лиспе, сепулька в булевом контексте означает истину, если она не пустая (так, увы, нельзя: нету булевого контекста). Т.е. было бы if (сепулька).

Date: 2008-03-29 05:40 am (UTC)
From: [identity profile] a-konst.livejournal.com
и в перле, и в руби, вроде бы :)

(no subject)

From: [identity profile] cema.livejournal.com - Date: 2008-03-29 05:48 am (UTC) - Expand

(no subject)

From: [identity profile] dizzy57.livejournal.com - Date: 2008-03-29 09:18 am (UTC) - Expand

(no subject)

From: [identity profile] a-konst.livejournal.com - Date: 2008-03-29 09:27 am (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2008-03-29 07:01 am (UTC) - Expand

(no subject)

From: [identity profile] meanab.livejournal.com - Date: 2008-03-29 10:46 am (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2008-03-29 10:50 am (UTC) - Expand

(no subject)

From: [identity profile] migmit.vox.com - Date: 2008-03-29 10:15 am (UTC) - Expand

Date: 2008-03-29 04:14 am (UTC)
From: [identity profile] kisalex.livejournal.com
nonempty() всё-таки будет лучше всего.
Ну или abissel(). Ой!

You mean

Date: 2008-03-29 05:52 am (UTC)
From: [identity profile] cema.livejournal.com
Oy()

Of course, in C# it becomes Oy().ToString()

Re: You mean

From: [identity profile] kisalex.livejournal.com - Date: 2008-03-29 07:10 am (UTC) - Expand

Re: You mean

From: [identity profile] egle.livejournal.com - Date: 2008-03-29 08:08 am (UTC) - Expand

Date: 2008-03-29 04:28 am (UTC)
From: (Anonymous)
existed()

Date: 2008-03-29 04:38 am (UTC)
From: [identity profile] roza.livejournal.com
Использовать empty() а не size() это хорошая привычка, не надо её менять.
На стандартные стринги обычно делают обёрточку (чтоб менше об стенку, да), и вот там-то имплементируют IsEmpty(), IsNotEmpty() и кого ещё хотят. Написал такое один раз, и уже гораздо реже хочется повесится :)

I have more

Date: 2008-03-29 05:50 am (UTC)
From: [identity profile] cema.livejournal.com
IsAlmostEmpty(), HasAFew(), HasALot(), NotTooFull(), AboutRightSize()

Anything else?

Re: I have more

From: [identity profile] netp-npokon.livejournal.com - Date: 2008-03-29 08:36 am (UTC) - Expand

Re: I have more

From: [identity profile] dizzy57.livejournal.com - Date: 2008-03-29 09:21 am (UTC) - Expand

Re: I have more

From: [identity profile] moon-aka-sun.livejournal.com - Date: 2008-03-29 09:35 am (UTC) - Expand

Re: I have more

From: [identity profile] a-bronx.livejournal.com - Date: 2008-03-29 10:34 am (UTC) - Expand

Re: I have more

From: [identity profile] pilpilon.livejournal.com - Date: 2008-03-29 09:36 am (UTC) - Expand

Re: I have more

From: [identity profile] mikev.livejournal.com - Date: 2008-03-29 11:49 am (UTC) - Expand
(deleted comment)

Date: 2008-03-29 08:01 pm (UTC)
From: [identity profile] qaraabayna.livejournal.com
идиосинкратично

Date: 2008-03-29 05:12 am (UTC)
From: [identity profile] gaus.livejournal.com
Очевидного не предложили.

сепулька.foo()
cепулька.bar()

Тогда уж

Date: 2008-03-29 05:53 am (UTC)
From: [identity profile] cema.livejournal.com
сепулька.bir()
сепулька.yok()

Re: Тогда уж

From: [identity profile] slobin.livejournal.com - Date: 2008-03-29 08:21 am (UTC) - Expand

(no subject)

From: [identity profile] qaraabayna.livejournal.com - Date: 2008-03-29 08:03 pm (UTC) - Expand

Date: 2008-03-29 05:40 am (UTC)
From: [identity profile] a-konst.livejournal.com
Cast to bool?

Date: 2008-03-29 06:54 am (UTC)
From: [identity profile] kondybas.livejournal.com
Кстати, да. В естественных языках подходящей конструкции нету, и это понятно. Набор кубиков, или запчастей - вот он. Если его нет, то и говорить не о чем. Это в абстракциях требуются обобщения до континуума, со вводом пустых множеств типа empty(). Но тогда сразу приходится уточнять: множество существует или нет, а если существует, то пустое оно или... или непустое.

Date: 2008-03-29 08:05 pm (UTC)
From: [identity profile] qaraabayna.livejournal.com
Самый разумный ответ so far.

(no subject)

From: [identity profile] kondybas.livejournal.com - Date: 2008-03-29 08:33 pm (UTC) - Expand

(no subject)

From: [identity profile] kondybas.livejournal.com - Date: 2008-03-29 08:41 pm (UTC) - Expand

(no subject)

From: [identity profile] raindog-2.livejournal.com - Date: 2008-03-30 09:55 pm (UTC) - Expand

Date: 2008-03-29 07:11 am (UTC)
From: [identity profile] mediaplayer.livejournal.com
вот проблемы у людей, а...
:-)

Date: 2008-03-29 12:36 pm (UTC)
From: [identity profile] ktenzin.blogspot.com (from livejournal.com)
+1

Date: 2008-03-29 07:55 am (UTC)
From: [identity profile] pokemone.livejournal.com
можно написать if(сепулька.size()) и это будет правильно работать

правильно, но дольше, нет?

а вообще присоединяюсь к оратору выше
каст в bool добавить и будет щасте

Date: 2008-03-29 09:21 am (UTC)
From: [identity profile] pokemone.livejournal.com
глупость сказал, для списка дольше

(no subject)

From: [identity profile] ex-andrey-t.livejournal.com - Date: 2008-03-29 01:33 pm (UTC) - Expand

(no subject)

From: [identity profile] pokemone.livejournal.com - Date: 2008-03-29 02:38 pm (UTC) - Expand

(no subject)

From: [identity profile] ex-andrey-t.livejournal.com - Date: 2008-03-29 04:13 pm (UTC) - Expand

(no subject)

From: [identity profile] pokemone.livejournal.com - Date: 2008-03-29 04:21 pm (UTC) - Expand

(no subject)

From: [identity profile] ex-andrey-t.livejournal.com - Date: 2008-03-29 04:26 pm (UTC) - Expand

(no subject)

From: [identity profile] raindog-2.livejournal.com - Date: 2008-03-29 06:04 pm (UTC) - Expand
From: [identity profile] inmbt0001.livejournal.com
как и С++ в целом. Если возникает нужда в частом написании "if (!s.empty())" может поискать проблему в логике самой программы? ИМХО, случай пустой строки требует более частой обработки небольшим по размеру if-м, чем случай непустой строки.

Date: 2008-03-29 08:05 am (UTC)
From: [identity profile] al-zatv.livejournal.com
>Понятно, что nonempty() - это опять-таки схоластика.
>А что тогда? Кажется, тут не только в стандарте C++,
>тут в языке налицо определенная дырка.

ээээ. скорее тут определенная дырка с другой стороны экрана:) воспринимайте !s.empty() как иероглиф:)

Date: 2008-03-29 08:10 am (UTC)
From: [identity profile] slobin.livejournal.com
Я воспринимаю s.test() как каст в bool. "Проверь строку! А на что проверить-то? Просто проверь!" ;-)

... Лемпел Зил, Лемпел Зив, Лемпел Будет Зить! ...

Date: 2008-03-29 08:54 am (UTC)
From: [identity profile] http://users.livejournal.com/_zlot_/
Спасибо, передам :)

(no subject)

From: [identity profile] shigin.livejournal.com - Date: 2008-03-29 09:14 am (UTC) - Expand

Date: 2008-03-29 08:19 am (UTC)
From: [identity profile] fima.livejournal.com
За функции, название которых представляет собой отрицание - расстрел на месте! Исключения, естественно, сразу приходят в голову, например, undo, что рушит стройную систему, т.е. некотрые программисты все же выживут. Перловый unless - однозначно расстрел.

Date: 2008-03-29 09:57 am (UTC)
From: [identity profile] pilpilon.livejournal.com
undo — это отрицание чего?

(no subject)

From: [identity profile] fima.livejournal.com - Date: 2008-03-29 11:06 am (UTC) - Expand

(no subject)

From: [identity profile] madfire.livejournal.com - Date: 2008-03-30 12:52 pm (UTC) - Expand

(no subject)

From: [identity profile] fima.livejournal.com - Date: 2008-03-30 01:08 pm (UTC) - Expand

(no subject)

From: [identity profile] madfire.livejournal.com - Date: 2008-03-30 08:55 pm (UTC) - Expand

Date: 2008-03-29 08:24 am (UTC)
From: [identity profile] qehgt.livejournal.com
>Кажется, тут не только в стандарте C++, тут в языке налицо определенная дырка.

Из работающего проекта:

#define ifnot(x) if(!(x))

Date: 2008-03-29 08:41 am (UTC)
From: (Anonymous)
In my code I created my own string class template which publicly inherits from std::basic_string (this makes sure that any code that expects std::string will also work with my string). I then added implicit conversion to bool (using the pointer-to-function idiom) so that empty strings are converted to false and non-empty -- to true. This allows me to write:
if (s)
{
}

Or, even better:
string f ();

if (string s = f ())
{
}

Date: 2008-03-29 08:57 am (UTC)
From: [identity profile] mad-ghost.livejournal.com
...
if(DontEmpty(sepulka))
...

bool DontEmpty(string s)
{
if(!s.empty()) return true
else return false;
}

Date: 2008-03-29 09:11 am (UTC)
From: [identity profile] shigin.livejournal.com
Вообще такую реализацию функции DontEmpty надо в wtf.

(no subject)

From: [identity profile] neatfires.livejournal.com - Date: 2008-03-30 04:29 pm (UTC) - Expand

Re: I have more

From: [identity profile] trueblacker.livejournal.com - Date: 2008-03-29 09:56 am (UTC) - Expand

(no subject)

From: [identity profile] netp-npokon.livejournal.com - Date: 2008-03-29 09:58 am (UTC) - Expand

(no subject)

From: [identity profile] madfire.livejournal.com - Date: 2008-03-30 12:54 pm (UTC) - Expand

(no subject)

From: [identity profile] squadette.livejournal.com - Date: 2008-03-29 01:22 pm (UTC) - Expand

(no subject)

From: [identity profile] madfire.livejournal.com - Date: 2008-03-30 12:54 pm (UTC) - Expand
Page 1 of 2 << [1] [2] >>

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 12:40 am
Powered by Dreamwidth Studios