• 2
  • 3
2023-01-08, 00:48
  #25
Medlem
Citat:
Ursprungligen postat av CyberVillain
Nej du har fel. Du kan bygga DSL i ett annat språk. Det kallas för intern DSL.

External and Embedded Domain Specific Languages

DSLs implemented via an independent interpreter or compiler are known as External Domain Specific Languages. Well known examples include LaTeX or AWK. A separate category known as Embedded (or Internal) Domain Specific Languages are typically implemented within a host language as a library and tend to be limited to the syntax of the host language, though this depends on host language capabilities.
Var kommer detta ifrån?

Men om vi utgår från denna definitionen vad är då Regex i .NET? Jag tolkar definitionen som att Regex i .NET är en internal DSL. Jag kan inte tolka det som att Fluent C# är en internal DSL.
Citera
2023-01-08, 01:22
  #26
Medlem
Citat:
Ursprungligen postat av Binary
Var kommer detta ifrån?

Men om vi utgår från denna definitionen vad är då Regex i .NET? Jag tolkar definitionen som att Regex i .NET är en internal DSL. Jag kan inte tolka det som att Fluent C# är en internal DSL.

Det är från wikin för DSL. Fluent syntax är det vanligare sättet att skapa internal DSL i C#
__________________
Senast redigerad av CyberVillain 2023-01-08 kl. 01:27.
Citera
2023-01-08, 13:57
  #27
Medlem
bithaxs avatar
Citat:
Ursprungligen postat av Binary
Fast nu fuskade du lite och använda Linq-metoden OrderBy. Dvs, du använde faktiskt funktionell programmering i ditt exempel där du försökte visa att imperativ stil är bättre. Map, Reduce är också funktionell programmering. Så egentligen gillar du det, du är bara inte överens med hur det är designat eller namngivet i .net?

Om du även hade skrivit en egen implementation för sortering, eller sortering på flera fält då hade du tydligare sett fördelen med funktionell stil. Ju mer komplext det blir, desto bättre blir funktionell programmering. Folk som jobbar mycket med komplicerade beräkningar använder ofta funktionella språk.

Att skapa egna lager med funktionella anrop är ofta en bra idé tycker jag.
Kodens syfte blir mycket enklare att förstå om du får in mer affärsregler och begrepp. T.ex
list.map(...) //innehåller logik som räknar om priser till EUR
Vs:
shoppingcart.mapToCurrency(..., currencyInfo) //mycket bättre kod IMHO

Däremot godkänner jag inte att göra sådant som globala extensions, då får man God objects som vet allt, det är inte bra. Typ string.ParseCustomer()

Man får inte använda metoder i standardbiblioteket för att de är ”funktionell programnering”? okej. I java har du list.Sort(). Utgör den funktionell programmering?

Vi kan skriva en egen order by så är det inte funktionell programmering då. Smart.

Jag gillar inte funktionell stil när det blir svårare att förstå (som linq i många fall) och när man bryter mot SOLID för att koden ska bli ”bättre och mer läsbar”.
__________________
Senast redigerad av bithax 2023-01-08 kl. 14:06.
Citera
2023-01-08, 14:16
  #28
Medlem
Citat:
Ursprungligen postat av bithax
Man får inte använda metoder i standardbiblioteket för att de är ”funktionell programnering”? okej. I java har du list.Sort(). Utgör den funktionell programmering?

Vi kan skriva en egen order by så är det inte funktionell programmering då. Smart.

Jag gillar inte funktionell stil när det blir svårare att förstå (som linq i många fall) och när man bryter mot SOLID för att koden ska bli ”bättre och mer läsbar”.
Nu är ju SOLID specifikt inriktat på OOP, så att funktionell programmering inte uppfyller det är inte så konstigt.

Men det är ju inte så att det innebär att funktionell kod för den delen blir oläslig (vilket för övrigt är rätt så subjektivt). Den som har jobbat med funktionella språk tycker antagligen att koden är mer lättläst.

Men nu handlar tråden om funktionell programmering i ett OOP-språk, så det är väl egentligen en relevant invändning från din sida.

Det går självklart att missbruka LINQ så att man får en lång kedja av komplicerade lambda-funktioner, men använt på "rätt" sätt så tycker jag ändå att koden blir både elegant och lättläst. Särskilt jämfört med imperativ kod med en massa loopar.
Citera
2023-01-08, 14:18
  #29
Medlem
Citat:
Ursprungligen postat av bithax
Man får inte använda metoder i standardbiblioteket för att de är ”funktionell programnering”? okej. I java har du list.Sort(). Utgör den funktionell programmering?

Vi kan skriva en egen order by så är det inte funktionell programmering då. Smart.

Jag gillar inte funktionell stil när det blir svårare att förstå (som linq i många fall) och när man bryter mot SOLID för att koden ska bli ”bättre och mer läsbar”.
Självklart ska du i de flesta fallen använda sådana inbyggda metoder för sortering mm. Poängen här var att jämföra typisk funktionell programmering med imperativ programmering där du behöver hålla reda på interna tillstånd i olika temp-variabler. Men vill du inte så vill du inte. Du slipper

Man kan kombinera SOLID med funktionell stil, det gör man vanligen i C# hela tiden.
Citera
2023-01-08, 21:07
  #30
Medlem
Citat:
Ursprungligen postat av CyberVillain
Det är från wikin för DSL. Fluent syntax är det vanligare sättet att skapa internal DSL i C#
Jag kollade med Chat GPT och det stämmer, då lärde jag mig något nytt. Jag tycker dock fortfarande att det är en olycklig klassificering eftersom det är såpass stor skillnad på t.ex. SQL, Regex, och att du följer ett visst pattern i C#.
Citera
2023-01-08, 22:20
  #31
Medlem
Citat:
Ursprungligen postat av Binary
Jag kollade med Chat GPT och det stämmer, då lärde jag mig något nytt. Jag tycker dock fortfarande att det är en olycklig klassificering eftersom det är såpass stor skillnad på t.ex. SQL, Regex, och att du följer ett visst pattern i C#.

Som sagt skillnad på extern och intern DSL
Citera
2023-01-11, 18:15
  #32
Medlem
bithaxs avatar
Idag igen samma argument.
Ska vi ha vi använda dependency injection för att skicka in ett token i klienten, eller ska vi bara lägga till string parameter överallt?

Ja men vi lägger ju till en string parameter på alla metoder för det är mer ”funktionellt”.

Fan vad trött jag blir.
Citera
2023-04-19, 18:19
  #33
Medlem
Citat:
Ursprungligen postat av bithax
De kunde ha kallat select för map i stället och haft reduce, dvs samma som javascript.

select antar jag kommer från att försöka efterlikna sql. Reduce funderar jag lite på, för är inte det precis samma som linqs aggregate?
Citera
2023-04-21, 05:51
  #34
Medlem
bithaxs avatar
Citat:
Ursprungligen postat av konrad-zuse
select antar jag kommer från att försöka efterlikna sql. Reduce funderar jag lite på, för är inte det precis samma som linqs aggregate?

Jo men man valde att göra sql like domain language i stället för att följa vedertagna begrepp som dessutom är kortare.

Du har ju andra vanliga listfunktioner som t.ex foldLeft osv. De har väl någon motsvarighet i linq, men ja man måste ju då lära sig vad de heter i C# i stället för vad de heter i alla andra språk.

Det är lite som om de hade kallat foreach för Iterate-Over eller liknande. Det kan man ju göra, men det är ju knappast standard lixom.
__________________
Senast redigerad av bithax 2023-04-21 kl. 05:54.
Citera
  • 2
  • 3

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in