Loading...
veso.tinev avatar veso.tinev 1 Точки

Класове/конструктори инстанцииране

Привет колеги,

нуждая се  от помощ за инстанцирането на класове.

Примерен много опростен клас (абстрахирайте се от евтл синтактични грешки, всичко минава през компилатора ):

class BitArray

{

        private BigInteger b;

        private int maxIndex=1;

       public BitArray(string input)

       { this.b = BigInteger.Parse(input);   }

      public int MaxIndex {  get { return this.maxIndex;  }  }

}

Проблемът:

Кода (в  main метода)  долу дава грешка "USe of unassigned local variable b" в последния ред.

  BitArray b;
  string input;
  input = Console.ReadLine();
  b = new BitArray(input);
 int myIndex = random.Next(b.MaxIndex);

за да тръгне, трябва да направя това (редовете с удивителните) :

  BitArray b;

  BitArray myBit = new BitArray("0");   !!!!!!!!!!
  

 string input;
  input = Console.ReadLine();
  b = new BitArray(input);

  myBit = b;                                        !!!!!!!!!
 int myIndex = random.Next(myBit.MaxIndex);  !!!!!!!!!!!!!!!!!!

 

Въпросът ми е защо компилатора мрънка за първия варинат, нали b = new BitArray(input); вика конструктора , респективно инициализира променливата????

 

 

 

Тагове:
0
C# OOP Basics
RoYaL avatar RoYaL Trainer 6849 Точки

С какво компилираш?! Кодът в тази последователност няма никакъв проблем и ако трябва да съм честен при мен не дава такива грешки. Да не би отделно да имаш глобална променлива със същото име?

И все пак каква е тази порочна практика да си декларираш променливите най-отгоре и после да им присвояваш стойности? Защо не просто:

string input = Console.ReadLine();
BitArray b = new BitArray(input);
int myIndex = random.Next(b.MaxIndex);

0
28/11/2015 17:59:52
veso.tinev avatar veso.tinev 1 Точки

навик от по-стари езици, но не бих се съгласил с определението "порочна практика"

Променливите се използат в различни конструкции и за мен пък точно декларирането непосредствено преди използването прави кода нечетивен.

0
RoYaL avatar RoYaL Trainer 6849 Точки

Говоря за локални променливи. Ако спазваш останалите правила - методът ти да не е много дълъг, например не по-дълъг от 15 реда, то не би трябвало да е нечетим кодът. Още повече ако в тези 15 реда изпозваш 10 нови променливи това ще вдигне редовете до 25, ако са декларирани най-отгоре.

Другото е, че това създава неконсистенция. Или ги декларирай така, или иначе. Обаче ако трябва да им инициализираш стойност в условни конструкции вече става друг бира.

http://codereview.stackexchange.com/questions/6283/variable-declaration-closer-to-usage-vs-declaring-at-the-top-of-method

0
Filkolev avatar Filkolev 4482 Точки

В КПК учим един принцип, който казва, че lifespan на една променлива трябва да е минимален, т.е. броят редове в кода между декларацията на променливата и първото й използване трябва да е максимално кратък. Ако между редове 2 и 44 не полваш променливата Х, защо ти е да я имаш декларирана на ред 2? Ако кодът е дълъг това създава неудобства.

Това са навици от по-стари езици, които по-добре да се ползват пестеливо. Подобно хойстване на променливи се прави само в JS към момента, но там си има добра причина - така или иначе всички променливи се хойстват и са достъпни още от самото начало на изпълнение на кода, с цел яснота е по-добре и декларациите им в кода да са най-отгоре, за да не се чуди някой по-неопитен програмист какво се случва.

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.