Výsledný kód programu, využívajícího funkcionální přístup ke zpracování CSV souboru v předešlém příspěvku, byl trochu kostrbatý a špatně čitelný. Obsahoval příliš mnoho podmínek if.
Těm se lze vyhnout, pokud použijeme takzvaný railway přístup k zápisu kódu. Při tomto přístupu se na funkci díváme jako na kus kolejiště s výhybkou a na spuštěný kód jako na vláček, který po sestaveném kolejišti jede.
Pokud je funkce vykonána v pořádku, pokračuje vláček, tedy náš kód, rovně. Pokud dojde k chybě, přehodí se výhybka a vláček pokračuje po vedlejší koleji a už se nikdy nemůže vrátit na původní směr.
Zjednodušený pohled na funkci je pak takovýto:
A celkový běh programu pak lze graficky vyjádřit takto:
Abychom byli schopni toto přenést do kódu, je nutné doplnit metodu onsuccess - stavem onfailure se nebudu zabývat, ale implementace by byla analogická a více informací a tipů naleznete v odkazech v první části tohoto miniseriálu - obvykle se implementují ještě metody OnFailure and OnBoth.
public static class ResultExtensions
{
public static Result<TOut> OnSuccess<T, TOut>(this Result<T> result, Func<T, Result<TOut>> func)
{
if (result.IsFailure)
{
return Result.Fail<TOut>(result.Error);
}
return func(result.Value);
}
public static Result OnSuccess<T>(this Result<T> result, Func<T, Result> func)
{
if (result.IsFailure)
{
return Result.Fail(result.Error);
}
return func(result.Value);
}
}
A původní funkci můžeme přepsat na:
public Result ProcessLine(int number, string content)
{
return headerInfoAction.Execute(number, content).OnSuccess(
headerInfo =>
{
return parser.ParseToDictionary(headerInfo, content).OnSuccess(
parsedLine =>
{
return lineIdProvider.GetLineId(parsedLine).OnSuccess(
id =>
{
return duplicateChecker.CanProcessLine(id, number);
});
});
});
}
Kód je kratší a lépe čitelný. Na závěr ještě jednou seznam odkazů na více informací:https://app.pluralsight.com/library/courses/csharp-applying-functional-principles
http://enterprisecraftsmanship.com/
https://github.com/vkhorikovhttps://www.nuget.org/packages/CSharpFunctionalExtensions
Osobně si myslím, že je to zajímavý způsob zápisu, ale nepřijde mi o moc víc čitelnější (jen tak v rychlosti z fleku, když si to pozorně přečtu tak je jasné že to na sebe navazuje s tím OnSuccess) než s podmínkami :) Ještě přemýšlím jestli je jasné, že výsledek funkce je Fail když se něco zvorá anebo by to člověk co takovýto kód dostane, nevěděl (v té implementaci se právě (aspoň zatím) neřeší, co se stane když by se to nepovedlo, ale předpokládám že právě z tohoto důvodu se implementuje i OnFailure, který jste v rámci příkladu přeskočil :))
OdpovědětVymazatOnFailure se neřeší, neboť není nutná žádná akce v případě neúspěchu - výsledek, tedy objekt Result se následně vyhodnotí a uživateli se zobrazí i případná příčina chyby - viz předešlý díl.
OdpovědětVymazatOnFailure se použivá, pokud je potřeba provést nějaký rollback apod. - více informací lze nalézt v odkazech.
THANKS YOU SO MUCH FOR THIS INFORMATIVE BLOG MAKE ME TO GET MORE STUFF.....
OdpovědětVymazatIM GONNA SHARE THIS WITH MY FRIENDS.....
Transportation Consulting Chennai
civil engineering consultants
Office Interiors in Chennai
Rainwater harvesting chennai
OdpovědětVymazatgood information!!!
nice post!!
VMware Training in Chennai
A very nice guide. I will definitely follow these tips. Thank you for sharing such detailed article. I am learning a lot from you.
OdpovědětVymazatJava training in Chennai | Java training in Omr
Oracle training in Chennai
Java training in Chennai | Java training in Annanagar
Java training in Chennai | Java training institute in Chennai | Java course in Chennai
Well somehow I got to read lots of articles on your blog. It’s amazing how interesting it is for me to visit you very often.
OdpovědětVymazatpython interview questions and answers
python tutorials
python course institute in electronic city
This looks absolutely perfect. All these tiny details are made with lot of background knowledge. I like it a lot.
OdpovědětVymazatData Science Training in Indira nagar
Data Science Training in btm layout
Python Training in Kalyan nagar
Data Science training in Indira nagar
Data Science Training in Marathahalli | Data Science training in Bangalore
OdpovědětVymazatReally very nice blog information for this one and more technical skills are improve,i like that kind of post.
rpa training in Chennai | rpa training in bangalore | best rpa training in bangalore | rpa course in bangalore | rpa training institute in bangalore | rpa training in bangalore | rpa online training
Inspiring writings and I greatly admired what you have to say , I hope you continue to provide new ideas for us all and greetings success always for you.
OdpovědětVymazatKeep update more information..
Selenium training in bangalore
Selenium training in Chennai
Selenium training in Bangalore
Selenium training in Pune
Selenium Online training
Selenium interview questions and answers
Really i appreciate the effort you made to share the knowledge. The topic here i found was really effective...
OdpovědětVymazatSoftgen Infotech is the Best SAP HANA Admin Training in Bangalore located in BTM Layout, Bangalore providing quality training with Realtime Trainers and 100% Job Assistance.
best blog to get more details
OdpovědětVymazatBEST ANGULAR JS TRAINING IN CHENNAI WITH PLACEMENT
AngularJS training in chennai | AngularJS training in anna nagar | AngularJS training in omr | AngularJS training in porur | AngularJS training in tambaram | AngularJS training in velachery
The knowledge of technology you have been sharing thorough this post is very much helpful to develop new idea. here by i also want to share this.
OdpovědětVymazatOracle Training | Online Course | Certification in chennai | Oracle Training | Online Course | Certification in bangalore | Oracle Training | Online Course | Certification in hyderabad | Oracle Training | Online Course | Certification in pune | Oracle Training | Online Course | Certification in coimbatore
Very nice post here and thanks for it .I always like and such a super contents of these post.Excellent and very cool idea and great content of different kinds of the valuable information
OdpovědětVymazatJava training in Chennai
Java Online training in Chennai
Java Course in Chennai
Best JAVA Training Institutes in Chennai
Java training in Bangalore
Java training in Hyderabad
Java Training in Coimbatore
Java Training
Java Online Training
Hi,Great information.Thanks for sharing.I always read your blog and get lot of useful information.
OdpovědětVymazatdata science training in chennai
data science training in porur
android training in chennai
android training in porur
devops training in chennai
devops training in porur
artificial intelligence training in chennai
artificial intelligence training in porur
It is amazing and wonderful to visit your site.Thanks for sharing this information,this is useful to me...
OdpovědětVymazatweb designing training in chennai
web designing training in tambaram
digital marketing training in chennai
digital marketing training in tambaram
rpa training in chennai
rpa training in tambaram
tally training in chennai
tally training in tambaram
Thanks for a marvelous posting! I seriously enjoyed reading it, you are
OdpovědětVymazata great author.I will be sure to bookmark your blog and will often come back in the future.
I want to encourage yourself to continue your great job, have a
nice weekend!
oracle training in chennai
oracle training in velachery
oracle dba training in chennai
oracle dba training in velachery
ccna training in chennai
ccna training in velachery
seo training in chennai
seo training in velachery
nice work keep it up thanks for sharing the content.Thanks for sharing this type of information, it is so useful.
OdpovědětVymazatweb designing training in chennai
web designing training in annanagar
digital marketing training in chennai
digital marketing training in annanagar
rpa training in chennai
rpa training in annanagar
tally training in chennai
tally training in annanagar
A very nice guide. I will definitely follow these tips. Thank you for sharing such detailed article. I am learning a lot from you.
OdpovědětVymazatoracle training in chennai
oracle training in omr
oracle dba training in chennai
oracle dba training in omr
ccna training in chennai
ccna training in omr
seo training in chennai
seo training in omr