मैंने अभी क्लोजर के साथ हैकिंग शुरू कर दी है, और हालांकि मैं भाषा की पूजा करता हूं, मैं समझ नहीं पा रहा हूं कि कुछ चीजों को मूर्खतापूर्वक कैसे किया जाए।बेवकूफ क्लोजर (+ कार्यात्मक) कोड कैसे लिखें?
compojure का उपयोग कर एक वेब एप्लिकेशन लेखन, यहाँ मेरी नियंत्रक क्रियाओं में से एक है:
(defn create [session params]
(let [user (user/find-by-email (params :email))]
(if user
(if (user/authenticate user (params :password))
(do (sign-in session user)
(resp/redirect "/home?signed-in=true"))
(resp/redirect "/?error=incorrect-password"))
(let [new-user (user/create params)]
(sign-in session new-user)
(resp/redirect "/home?new-user=true")))))
मैं एक बहुत ही जरूरी तरीके से इस लिख रहा हूँ। इतने सारे let
एस/if
एस/do
एस का उपयोग करके, मैं मदद नहीं कर सकता लेकिन लगता है कि मैं कुछ गलत कर रहा हूं। मैं इसे कार्यात्मक रूप से कैसे लिखूं?
यहाँ मैं क्या
look if user exists
if user exists, try to sign user in using password provided
if password is wrong, redirect to "/?error=incorrect-password"
if password is correct, sign user in and redirect to "/home?signed-in=true"
else create user, sign user in, and redirect to "/home?new-user=true"
धन्यवाद करने के लिए इतना कोशिश कर रहा हूँ के लिए psuedocode है!
लंबे + विस्तृत प्रतिक्रिया के लिए बहुत बहुत धन्यवाद! एक हैंडलर फ़ंक्शन/फ़ंक्शन ब्रेकअप कैसे दिखता है? और झंडे से तुम्हारा क्या मतलब है? समारोह उचित तार वापस करेगा? – hurshagrawal
बहुत सारे विकल्प हैं। एक तरफ आपके प्रतिक्रिया मानचित्र में साइड इफेक्ट "एक्शन" की एक सूची हो सकती है कि हैंडलर फ़ंक्शन अनुक्रम में निष्पादित होता है। आप यह भी देखना चाहेंगे कि कुछ रिंग मिडलवेयर कैसे काम करता है। – mikera
वास्तव में, "if-then-else" निर्माण का आविष्कार लिस्प के निर्माता जॉन मैककार्थी ने किया था, विशेष रूप से कार्यात्मक प्रोग्रामिंग को आसान बनाने के लिए। https://en.wikipedia.org/wiki/McCarthy_Formalism –