Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 16:14 18.06.24 
Компютри и Интернет
   >> Програмисти
Всички теми Следваща тема *Кратък преглед

Страници по тази тема: 1 | 2 | 3 | 4 | 5 | >> (покажи всички)
Тема нов въпрос към разбирачите на стандартанови  
Автор ~!@$%^amp;*()_+ (целия горен ред)
Публикувано05.11.05 21:45



има ли изискване при присвояване, ако нещата се оклепат, лявата страна да запази предишната си стойност?

щото само така мога да си обясня следните конструкции, които срещам напоследък:

var обикновено е указател или клас

var = something; // обикновено 0, NULL, или нещо подобно
var = foo()

или

var = something; // обикновено 0, NULL, или нещо подобно
foo(&var)

като във втория случай става дума за чисто out параметър, айде второро мога да приема че има резон, но за първото не виждам никакъв смисъл, освен ако няма някакво такова изискване в стандарта.



Тема няма стандартнови [re: ~!@$%^amp;*()_+]  
АвторПeнчo (Нерегистриран)
Публикувано05.11.05 22:33



Не виждам връзка със някакъв стандарт тук, по-скоро въпрос на защитна практика.

В първия случай първоначалната инициализация може да е необходима, защото ако foo() хвърли exception var няма да е инициализирана.

Във втория случай foo също може да хвърли exception и var да остане неинициализирана.

Два хубави примера на защитно програмиране. Добър стил. По добре от нищо във всеки случай.



Тема Re: няма стандартнови [re: Пeнчo]  
Автор ~!@$%^amp;*()_+ (целия горен ред)
Публикувано05.11.05 23:18



добра практика друг път, това е точно да си търсиш белята

добрата практика е ако не разчиташ на стойността в случай на exception.

нали се сещаш, че exceptiona може да бъде хвърлен и по време, а във втория случай и след присвояването, в такъв случай ще имаме наполовина омазана променлива, за която си мислиме, че в нея има коректна стойност.



Тема Re: няма стандартнови [re: ~!@$%^amp;*()_+]  
Автор Maтa Kocмaтa (маймун)
Публикувано05.11.05 23:34



Ако присвояваш на нещо с предефиниран оператор= никой не ти гарантира, че не може да се хвърли екс. по средата и съответно 'половината' от обекта да е присвоен.

Не съм сигурен синхронни и асинхронни екс. дали се 'засягат' от стандарта, мисля че не. Но би трябвало за ПОД типове да е сигурно, че няма да ти се хвърли екс. То иначе посмъртно не можеш да напишеш нещо exc. safe...

Машина за отделяне на кожа и сланина от парени свине


Тема На мен по ми харесва второто.нови [re: ~!@$%^amp;*()_+]  
АвторHellebore (Нерегистриран)
Публикувано06.11.05 01:10



Най-малкото спестява мислене на този, който го пише.



Тема Пак ще ти разкажа един вицнови [re: ~!@$%^amp;*()_+]  
Автор Colombino (работен)
Публикувано06.11.05 01:21



Мъж вървял по улицата и ръсел пясък. Спрял го полицай:
- К`во праиш ти, бе?
- Пясък ръсим!
- Това виждам, ами защо?
- Против крокодили!
- Ами тука няма крокодили!?
- Е ка че има бе? Нали ръсим.

Като бех малък и биех всичко живо на шах, всички беха убедени че е щото 'уча ходове'. Ся ако ти си мислиш, че за да ти отговори разбирач на въпроса трябва да 'чете стандарти' си в същата позиция.

Не се връзвай ако всички правят дадено нещо - хората са доста инертни и стадни. За пример ще ти дам, че никога не тръгвам на светофар с групата след първия засилил се на червено (ако минавам на червено знам кога и сам).

System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_


Тема Re: няма стандартнови [re: Maтa Kocмaтa]  
Автор ~!@$%^amp;*()_+ (целия горен ред)
Публикувано06.11.05 05:26



и аз така си го представях

следователно от гледна точка на защитното програмиране е безсмислено

от друга страна аз предпочитам доброто документиране вместо защитното програмиране, особено когато нещата минават през нялолко слоя, после се чудиме защо сичко е толко бавно



Тема не знам дали ги учиш, важното е че ги знаешнови [re: Colombino]  
Автор ~!@$%^amp;*()_+ (целия горен ред)
Публикувано06.11.05 05:30



аз си имам мнение за добрия стил и в доста случаи той влиза в противоречие със стандартите или с това което са казали гурутота.

обаче, когато пиша нещо което ще се ползва не само от мене се опитвам да се придържам към стандартите. а ти определено си от тия дето си ги чел, щото аз предпочитам здравия разум.


та ако съм разбрал правилно приказката ти за крокодилите и тя е конкретна, а не обща, това са глупости.



Тема ако щете [re: ~!@$%^amp;*()_+]  
АвторПeнчo (Нерегистриран)
Публикувано06.11.05 08:08



Нещо някой не е разбрал. Да видим кой?

Нали &amp каза че var е поинтер. (това или клас не го разбрах, да поясни)

Тогава във първия случай ако се throw-не exception НЕ е възможно пристояване на частично инициализирана променлива, защото няма да има присвояване въобще. Значи първоначалното инициализиране с NULL и последваща проверка за NULL е една винаги работеща идея.

Във втория случай var пак е поинтер. Тогава може да се получи каша благодарение на програмиста. Може и да не се получи ако се следва защитния стил, а именно присвояването да е на края малко преди returna-а (важи и за случай 1 при оператор). Така няма да се получи наполовина инициализирани структури. Тоест и случай 2 е добра идея.

Ако някой още мисли да ми противоречи моля да ми покаже малко код, защото така на сухо всеки може да дрънка каквото му хрумне. И също так искам да видя по-доброто решение.



Тема Здрав разумнови [re: ~!@$%^amp;*()_+]  
Автор Colombino (работен)
Публикувано06.11.05 10:30



Думата ми беше по-скоро по принцип за защитното програмиране. Много булшити се пишат в опит да се защитим от несъществуващи заплахи.

Единственото от стандартите което ти трябва да знаеш е реда на изпълнение на присвояването. Останалото е обикновена логика.

За втория пример в много случаи инициализацията има смисъл, например като викаш някоя чужда лошо документирана /и/или проектирана/ функция и не си сигурен /или именно щото много добре знаеш/ тя какви ги върши . Иначе нормалното поведение е да се връща код за успех, който да се проверява преди употреба на така напълнената променлива.

>> има ли изискване при присвояване, ако нещата се оклепат, лявата страна да запази предишната си стойност?

Разбира се. Но само случай на 'истинско' (атомарно) присвояване, каквото си дал в примера. Присвояването се извършва от дясно на ляво и ако гръмне нещо във функцията променливата ще си остане със старата стойност. Така както си го написал ( на два съседни реда и неоградено от try ) няма смисъл, но ако е така бива:


....
var = NULL;
....
try
{
....
var = foo();
....
}
....
catch(...)
{
....
}
....
delete var;


Но тая техника е доста 'кодоемка' и силно не я препоръчвам.
Правилният начин да се напише същото е да се ползват автоматични в скоупа на try 'държачи' като std::auto_ptr и подобни.

System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_



Страници по тази тема: 1 | 2 | 3 | 4 | 5 | >> (покажи всички)
Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.