Skip to content

Code Review #1 #1

@t-smirnov

Description

@t-smirnov

branch: firstday

класс Animal.

class Animal
    {
        public string name, color, meal, howl, vois, sleep, type, skill;
        public int age;
        public string AnimalsInfo, AnimalParticularSpecies;
        public bool sweem, run, fly;

     public void skillsplay ()
        {
            if (sweem)
                skill = skill + "Умеет плавать";
            else skill = skill + "";

            if (run)
                skill = skill + "Умеет бегать";
            else skill = skill + "";

            if (fly)
                skill = skill + "умеет летать";
            else skill = skill + "";

        } 

Начнем с простого, почему у тебя сам класс с видимостью internal(которая по дефолту задается при отсутствии явных модификаторов, таких как public или private , но методы skillsplay() и show - public? Делая класс internal - ты не сможешь использовать его в другой сборке (assembly), тебе пока, я думаю можно делать все классы public. И разберись с тем, зачем всё же нужны поля и свойства. И что такое модификаторы доступа get и set .


Тебе не кажется, что этот класс должен быть абстрактным? Ну, даже самое понятие животное довольно абстрактное. А потом подумать, каким минимальным набором свойств и методов обладает каждое животное и описать их в этом классе,а остальные свойства, которые присущи уже млекопитающим или птицам или еще кому - реализовать в подклассах (Derived) класса Animal? Тут трудность как минимум в том, если добавится еще один скилл, то придется еще один if дописывать и текст к нему.


Обычно у всех разработчиков, для удобочитаемости кода используется определенный стиль именования переменных, параметров и расположения их в коде.

  • Например приватные переменные, которые используются только внутри класса и недоступны наружу (другим классам) обычно именуются либо с маленькой буквы, либо через подчеркивание в самом начале, например
    private object _someVariableName;.
  • Именование публичных свойств, методов и полей, а так же констант принятно с большой буквы, а если имя содержит более 1 слова, то применяется стиль CamelCase, когда каждое новое слово пишется слитно, но с большой буквы, например
public void RenderOnMap(Animal animal);

public const string FileSize = 50 * 1024 * 1024;

public TimeSpan CalculateSleepingTime {get; set;}

Подумай об осмысленном наименовании и задании типа для полей, свойств и методов.
Ну т.е. я, смотря на код класса - не могу понять по названию, что этод метод должен делать

  • Он ничего не принимает как аргументы
  • Он ничего не возвращает как результат
    А должен понимать по одному названию, ну т.е. если бы у класса был (абстрактный) метод
    например
    public int NumberOfTeeth() / public int NumberOfTeeth {get;set;}
    или
    public AttackResult Attack(Animal victim)

Из этих названий вроде понятно, что делает метод или свойство.

Пока хватит :)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions