get/ set method vs public variable
70 отговора
2413 прегледа
get/ set method vs public variable
какво е по добре да се ползва
гет/сет методи или направо публик променливи
намерих ето това нещо сас гоогле-а и като гледам май нещата повече клонят кам гет/сет макар че има подразници и на променливите
[линк]
та какво е васто мнение по вапроса
гет/сет методи или направо публик променливи
намерих ето това нещо сас гоогле-а и като гледам май нещата повече клонят кам гет/сет макар че има подразници и на променливите
[линк]
та какво е васто мнение по вапроса
Re: get/ set method vs public variable
Догмата май клони към гет/сет методи. Което е жалко, защото лично съм наблюдавал безумия с изобилие от гет/сет двойки, където прост публичен член би свършил по-добра работа.
Мисля си, че гет и сет методите са за страхливи "програмисти", които програмират дефанзивно и ги слагат само от страх, че видиш ли, някога ще им се наложи да правят нещо при достъп до променливата. Може би е редно да осъзнаем, че ако промяната в такъв случай е трудна то много неща ще да са били осрани преди това и проблема не са гет/сет методите.
Това е моментно хрумване. Някой да иска да ме опровергае?
--
Екстремно програмиране на български.
[линк]
Мисля си, че гет и сет методите са за страхливи "програмисти", които програмират дефанзивно и ги слагат само от страх, че видиш ли, някога ще им се наложи да правят нещо при достъп до променливата. Може би е редно да осъзнаем, че ако промяната в такъв случай е трудна то много неща ще да са били осрани преди това и проблема не са гет/сет методите.
Това е моментно хрумване. Някой да иска да ме опровергае?
--
Екстремно програмиране на български.
[линк]
Re: get/ set method vs public variable
ми като се има предвид, че и пропертитата скриват именно това дали има get/set методи или директно присвояваш на променлива...
Сигнатура!
Сигнатура!
Re: get/ set method vs public variable
като почнеш да пишеш юнит-тестове 70% от времето, ще осъзнаеш че оверрайдването на гетерите и сетерите е вълшебно.. ;-)
Re: get/ set method vs public variable
според мен използването на публични променливи води до много по-четлив код, ако пропертиес беше част от стандарта нямаше изобщо да има 2 мнения по въпроса
Re: get/ set method vs public variable
"като почнеш да пишеш юнит-тестове 70% от времето"
:)) хехе, т'ва е дефиниция на 'да продаваш краставици на краставичар'
:)) хехе, т'ва е дефиниция на 'да продаваш краставици на краставичар'
Re: get/ set method vs public variable
Абе аз предпочитам get/set пред property - виждам, че достъпвам контролирана променлива. Пък и ми е индикатор за лош код - като започнат да се натрупват повече, класа се е превърнал в проста торба и не е лошо да се преосмисли.
Re: get/ set method vs public variable
То е част от стандарта...ма на C# и Delphi :)
Re: get/ set method vs public variable
Ако го гледаш от страна на пълна енкапсулация - естествено, че ще ползваш get/set методи - най-малкото ти позволяват транспарентно да променяш/добавяш функционалност - излишно е да обяснявам защо това е яко, нали? Това което ти наричаш страх, аз му викам future proofing.
Re: get/ set method vs public variable
Овъррайдвам гет/сет методи и пропъртита почти само като работя с брутален legacy код. Техниката е добра за опитомяване на такива дзверове.
Предположение: като си пишеш тестовете след кода си в същата ситуация, на която викам legacy по-горе
. Говоря за изтърван и неконтролируем код, който се опитваме да вържем с тестове.
--
Екстремно програмиране на български.
[линк]
Предположение: като си пишеш тестовете след кода си в същата ситуация, на която викам legacy по-горе
--
Екстремно програмиране на български.
[линк]
Re: get/ set method vs public variable
Предпочитам други future proofing методи, които не ми осират кода с безсмислени функции от типа:
Whatever GetSomething()
{
return this.someThing;
}
Ако ми затрябва такава функция в бъдещето защо просто да не си я добавя като видя истинската нужда?
Предпочитам и да избягвам презастрахования за бъдещето без да има реална нужда от тях.
--
Екстремно програмиране на български.
[линк]
Whatever GetSomething()
{
return this.someThing;
}
Ако ми затрябва такава функция в бъдещето защо просто да не си я добавя като видя истинската нужда?
Предпочитам и да избягвам презастрахования за бъдещето без да има реална нужда от тях.
--
Екстремно програмиране на български.
[линк]
Re: get/ set method vs public variable
Има ги и в python, ВБ и Ruby (за третото не съм на 100% сигурен, но ме мързи да проверявам).
--
Екстремно програмиране на български.
[линк]
--
Екстремно програмиране на български.
[линк]
Re: get/ set method vs public variable
И като я добавиш, какво получаваш:
SetSometing();
someThing;
за да не ти се строши стария code
или махаш someThing (което може и да е наложено от промени в структурите на данните отдолу) и почваш да рефакторваш като обезумял.
Anyways, разни хора, разни идеали - едва ли има смисъл от дискусии кой code е по-хубав - има си coding standards по фирмите и тва е :)
SetSometing();
someThing;
за да не ти се строши стария code
или махаш someThing (което може и да е наложено от промени в структурите на данните отдолу) и почваш да рефакторваш като обезумял.
Anyways, разни хора, разни идеали - едва ли има смисъл от дискусии кой code е по-хубав - има си coding standards по фирмите и тва е :)
Редактирано от gruhal на
Re: get/ set method vs public variable
не знаех, нямам сблъскване с тях, да са живи и здрави :)
Re: get/ set method vs public variable
Ами едно нещо дето и иде на ума е, че примерно DataBinder не ще да байндва публични мембъри, а само публични пропъртита... Ако го ползваш с custom class а не с DataTable няма да минеш без аксесори. Ама пък от друга страна това го забелязах като реших да правя изгъзици с DataBinder - сега не ме кефи да го ползвам и нямам проблем, но си пиша аксесорите все пак :)
Powered by telerik fuel. Sometimes by vodka.
Powered by telerik fuel. Sometimes by vodka.
Re: get/ set method vs public variable
Ми няма универсално решение, според случая!
Персонално, ако стигна до момента за добавяне на метода:
int AAA::Get() const
{
return iii;
}
Първия въпрос, който си задавам, е "Защо по дяволите ще искам да давам на някого достъп до iii, по този начин разкривайки детайли от имплементацията?" И тръгвам от точката, че дизайна явно куца, и гледам да избягна въобще get/ set двойката.
==============
Ако класа е интерфейсен - почти 100% get/ set ще изчезне.
Персонално, ако стигна до момента за добавяне на метода:
int AAA::Get() const
{
return iii;
}
Първия въпрос, който си задавам, е "Защо по дяволите ще искам да давам на някого достъп до iii, по този начин разкривайки детайли от имплементацията?" И тръгвам от точката, че дизайна явно куца, и гледам да избягна въобще get/ set двойката.
==============
Ако класа е интерфейсен - почти 100% get/ set ще изчезне.
Re: get/ set method vs public variable
Изборът е според вкуса на програмиста. Използуването на public променлива ще намали малко обема на кода, и това решение е по - добро ако имаш малко такива променливи. Но ако променливите са повече ти препоръчвам да използуваш get/set механизъм. Изпълването на клас с голям брой public променливи не е особено стабилен код и може да доведе до грешки.
Re: get/ set method vs public variable
като стана дума за юнит тестове - абе как културно да проверя от тест някой private member на клас дето тествам?
друго - ползвате ли някакъв генератор на стъбове - или оверрайдвате гетерите и сетерите за тая цел?
Сигнатура!
друго - ползвате ли някакъв генератор на стъбове - или оверрайдвате гетерите и сетерите за тая цел?
Сигнатура!
Re: get/ set method vs public variable
Ако става въпрос за C++. Ако класа който искаш да тестваш се казва TClass с header "Class.h" - в тест cpp файла, дето правиш
#include "Class.h"
сложи един
#define private public
преди #include "Class.h"
Може да помогне, но не съм сигурен.
------------------------
Втори начин:
Пак искаш да тестваш TClass. Имаш тестов клас TTestClass.
В декларацията на на TClass правиш:
friend class TTestClass;
Но пък неудобството е пипането в production header-a на
TClass.
#include "Class.h"
сложи един
#define private public
преди #include "Class.h"
Може да помогне, но не съм сигурен.
------------------------
Втори начин:
Пак искаш да тестваш TClass. Имаш тестов клас TTestClass.
В декларацията на на TClass правиш:
friend class TTestClass;
Но пък неудобството е пипането в production header-a на
TClass.
Re: get/ set method vs public variable
Или 3-ти вариант:
В класа TClass, който искаш да тестваш, слагаш метод от типа на
"void SelfTest()", който има non-default имплементация само в тестова среда.
Но тоя метод не е много добър по понятни причини.
Или 4-ти вариант:
Директно в unit test project-a включваш source files na TClass - пак не много добре.
В класа TClass, който искаш да тестваш, слагаш метод от типа на
"void SelfTest()", който има non-default имплементация само в тестова среда.
Но тоя метод не е много добър по понятни причини.
Или 4-ти вариант:
Директно в unit test project-a включваш source files na TClass - пак не много добре.