<bgdev />free

Вход Регистрация

нетаджии, var vs explicit type
0

0 1 2 3
#2123 (ツ) Courvoisier
Последно редактирано на 01.08.2020 от Courvoisier, видяно: 1372 пъти.

Малко tabs vs spaces тема.

Кое предпочитате да ползвате, var или да пишете типът винаги. Естествено, ако го правите за LINQ резултат сте мазохисти.

Но, кое предпочитате?

var products = new List<Product>();

или

List<Product> = new List<Product>();

Аз лично смятам, че ако не ползвате var сте мазохисти. Като рефакторирате е много по- лесно да е var. Пък и е по- естестическо.

Дори

var temp = default(string);

е по- красиво.

#2125 (ツ) Courvoisier
Последно редактирано на 01.08.2020 от Courvoisier, видяно: 1369 пъти.

A правите ли


public class Hui 
{
    public IList<NaebaniShutki> NaebaniShutki { get; }

    public Hui()
    {
        NaebaniShutki = new List<NaebaniShutki>();

    }

}

Що го правя? Искам някой след мен да не ми преписва цял лист на пропъртито, ами да добавя и маха NaebaniShutki от него.

#2129 (ツ) Delegate
Създадено на 01.08.2020, видяно: 1356 пъти.

var ползвам в LINQ, иначе не виждам особен смисъл да развалям четливостта. Тя вар-та и кирпича са compile-time, накрая все същото излиза. варта те прави по-лежерен


foreach (var pair in someCollection)
вместо
foreach (KeyValuePair<string, int> pair in someCollection)

Абе, ако имаш в някакъв обект анонимен метод с var и го асайнеш към ивент, нямаше ли някаква драма после при dispose-ването да се махне от InvocationList на ивент делегата...

#2137 (ツ) bvbfan
Създадено на 01.08.2020, видяно: 1348 пъти.
Courvoisier

Що го правя? Искам някой след мен да не ми преписва цял лист на пропъртито, ами да добавя и маха NaebaniShutki от него.

Не виждам как го спираш да махне всички и да си сложи неговите, което е преписване на цял лист.

#2144 (ツ) Elim Garak
Създадено на 01.08.2020, видяно: 1337 пъти.

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

#2157 (ツ) stewie
Създадено на 01.08.2020, видяно: 1166 пъти.

Е са за linq резутат. Голям прас


var nasraniDupenca = dupenca.Where(x => x.Naakano); 

ко му е лошото. Може си видиш типа по всяко време.

#2158 (ツ) stewie
Създадено на 01.08.2020, видяно: 1166 пъти.
Elim Garak

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

Колко курви и кокаин намаза откакто цъкаш на Ръст ?

#2160 (ツ) stewie
Създадено на 01.08.2020, видяно: 1166 пъти.
Courvoisier

A правите ли


public class Hui 
{
    public IList<NaebaniShutki> NaebaniShutki { get; }

    public Hui()
    {
        NaebaniShutki = new List<NaebaniShutki>();

    }

}

Що го правя? Искам някой след мен да не ми преписва цял лист на пропъртито, ами да добавя и маха NaebaniShutki от него.

За къф член ти е IList, това в някакъв много специален случай ще ти трябва вместо IEnumerable.

#2169 (ツ) Courvoisier
Създадено на 01.08.2020, видяно: 1312 пъти.

На Entity (EF), ако е IEnumerable няма Lazy Loading, там ги слагам ICollection. IEnumerable няма Add. IList пък е Sortable. Зависи къде и за какво го ползвам. Например, за Contract ползвам IEnumerable, за Entity ползвам ICollection и ако някъде ми трябва повече операции, IList, може и IDictionary. Гледам да е интерфейса, защото we should depend on abstraction, not concretion.

#2170 (ツ) Stilgar
Последно редактирано на 01.08.2020 от Stilgar, видяно: 1310 пъти.

var когато типът е ясен (тоест когато имаш конструктор или литерал от дясната страна), explicit type в останалите случаи. Първо съм виждал около 5 пъти професионални (вярно junior) програмисти да не разбират, че правят нещо с IEnumerable вместо с IQueryable заради var и да разказват играта на положението. Второ не могат да се видят такива и други подобни грешки когато се чете кода (било то code review или друго) защото за да видиш типа трябва да посочиш тоя var, а ти ако предположиш някакъв тип просто няма да разбереш, че си предположил грешно. От друга страна са хора като мен които са параноици и винаги мислят че са предположили грешно и ръкомахат върху всеки var тоест убивате ми продуктивността като ползвате var. И накрая код се чете не само в IDE. Понякога този код се показва в лекция, понякога се share-ва екран, понякога се чете в GitHub или VSTS. Тогава как разбираме какво е зад var-а? Преди 2-3 месеца Кенов правеше някаква лекция и аз прекарах 5 мин да споря с него през чата защото един var бях предлопожил, че е Task а той бил Task[] или нещо такова. Какво трябваше да направя да посоча var-а в YouTube и да ми покаже типа?

#2172 (ツ) Courvoisier
Последно редактирано на 01.08.2020 от Courvoisier, видяно: 1308 пъти.

@Stilgar, аз затова им дърпам кода като правя ревю, щото не винаги е ясно какво става само с четене, освен ако не си концентриран на 200% и не знаеш цялото API. Мисля, че код ревюто не е нещо, което трябва да се прави бързо.

Иначе верно, затруднява в тези случаи. Май езикът не се развива така, че всичко да е ясно от пръв поглед. Например новите switch-ове.

Така е разбираемо:


public string WhatFruit => Fruit switch
{
  Apple _ => "This is an apple",
  _ => "This is not an apple"
};

Но като почнат да nest-ват switch + when? То би трябвало да се раздроби, но го виждам в PluralSight вече на няколко и в първия момент си викам WTF.

#2173 (ツ) Courvoisier
Последно редактирано на 01.08.2020 от Courvoisier, видяно: 1308 пъти.
Delegate

Абе, ако имаш в някакъв обект анонимен метод с var и го асайнеш към ивент, нямаше ли някаква драма после при dispose-ването да се махне от InvocationList на ивент делегата...

Аз съм онзи, лудият, който вместо anonymous метод, ще направи:

        
        public static IHostBuilder CreateHostBuilder(string[] args)
        {

            return Host
                .CreateDefaultBuilder(args)
                .ConfigureServices(CreateServices)
                .ConfigureLogging(CreateLogging)
                .ConfigureWebHostDefaults(CreateWebHost)
                .UseWindowsService();
        }

        private static void CreateWebHost(IWebHostBuilder builder)
        {
            builder
                .UseKestrel()
                .ConfigureAppConfiguration(CreateConfiguration)
                .UseStartup<Startup>();
        }

#2174 (ツ) Stilgar
Създадено на 01.08.2020, видяно: 1306 пъти.
Courvoisier

@Stilgar, аз затова им дърпам кода като правя ревю, щото не винаги е ясно какво става само с четене, освен ако не си концентриран на 200% и не знаеш цялото API. Мисля, че код ревюто не е нещо, което трябва да се прави бързо.

Аз пък им връщам кода да си го оправят ако видя var който не разбирам какво прави. Има една простотия във VS че ToList() го води obvious type което е пълна глупост и само заради него не съм настроил editorconfig да дава warning за варосване.

#2175 (ツ) Stilgar
Създадено на 01.08.2020, видяно: 1305 пъти.
Courvoisier
Delegate

Абе, ако имаш в някакъв обект анонимен метод с var и го асайнеш към ивент, нямаше ли някаква драма после при dispose-ването да се махне от InvocationList на ивент делегата...

Аз съм онзи, лудият, който вместо anonymous метод, ще направи:

        
        public static IHostBuilder CreateHostBuilder(string[] args)
        {

            return Host
                .CreateDefaultBuilder(args)
                .ConfigureServices(CreateServices)
                .ConfigureLogging(CreateLogging)
                .ConfigureWebHostDefaults(CreateWebHost)
                .UseWindowsService();
        }

        private static void CreateWebHost(IWebHostBuilder builder)
        {
            builder
                .UseKestrel()
                .ConfigureAppConfiguration(CreateConfiguration)
                .UseStartup<Startup>();
        }

Ти сигурен ли си че знаеш какво е анонимен метод?

#2176 (ツ) Courvoisier
Създадено на 01.08.2020, видяно: 1305 пъти.

От гледна точка що ползваме strong types езици да. Как ли се оправят джабаскриптите... а те и там измислиха TypeScript. Помня как съм търсел цял ден ; в AngularJS, щото нямам някакво свястно IDE, ами VSCode.

#2177 (ツ) Courvoisier
Последно редактирано на 01.08.2020 от Courvoisier, видяно: 1305 пъти.

@Stilgar

TestDelegate testDelC = (x) => { Console.WriteLine(x); };

ПС, ОК, Lambda expression е.

Тогава delegate(string s) { Console.WriteLine(s); };

#2178 (ツ) Courvoisier
Последно редактирано на 01.08.2020 от Courvoisier, видяно: 1303 пъти.

Но пиша


var consumer = new EventingBasicConsumer(...);
consumer.Received += OnReceived;
private void OnReceived(object sender, BasicDeliverEventArgs e)
{
    ...
}

Даже бих написал (не е anonymous method, баси, засегна ме)

if(IsItTrue(instance)) 
{
    ....
}

с метод


private bool IsItTrue(Instance instance) 
{
    return instance.field1 // == true
        && instance.field2.Equals("alabala", ignorecase);
}
#2180 (ツ) Stilgar
Създадено на 01.08.2020, видяно: 1291 пъти.

И какво общо има анонимният метод с оня код от по-предишния ти пост?

#2181 (ツ) Courvoisier
Създадено на 01.08.2020, видяно: 1289 пъти.

Ми няма, идеята ми беше, че пиша експлицитно метод, за да е по- четим кода, което е в противоречие с предпочитанията ми за var.

#2183 (ツ) Courvoisier
Последно редактирано на 01.08.2020 от Courvoisier, видяно: 1284 пъти.

Друго нещо, което избягвам е да имам код след 80-та колона. Гледал съм този връх в LGTB общоността и съм взел от него каквото е харесало на субективното ми мнение.

Например, вместо:


public MyFerma(IKrushoberach krushoberach, INegarSPraska4ka negarSPraska4ka, IOsemenitel osemenitel) 
{
    ....
}

ще напиша

public MyFerma(
    IKrushoberach krushoberach, 
    INegarSPraska4ka negarSPraska4ka, 
    IOsemenitel osemenitel)
{
    ....
}

LGTB пикът = ITT 2016 - Kevlin Henney - Seven Ineffective Coding Habits of Many Programmers

0 1 2 3

нетаджии, var vs explicit type
0

AsmBB v3.0 (check-in: a316dab8b98d07d9); SQLite v3.42.0 (check-in: 831d0fb2836b71c9);
©2016..2023 John Found; Licensed under EUPL. Powered by Assembly language Created with Fresh IDE