क्या कॉफीस्क्रिप्ट का उपयोग करके कुछ वापस नहीं करने का कोई तरीका है?


116

ऐसा लगता है कि कॉफीस्क्रिप्ट स्वचालित रूप से अंतिम वस्तु को एक दायरे में लौटा देता है। क्या मैं इस कार्यक्षमता से बच सकता हूँ?


आपको क्यों चाहिए होगा? जब आप पसंद करते हैं तो क्या आप लौटाए गए मूल्य को नहीं छोड़ सकते?
क्रिस

11
@ क्रिस: जब कोई सार्थक वापसी मूल्य नहीं है, तो जो कुछ भी होता है उसे अंतिम विवरण के परिणाम के रूप में लीक करना एक अच्छा विचार नहीं है।

11
@ क्रिस के पास प्रदर्शन / / / जबकि छोरों के साथ प्रदर्शन के निहितार्थ भी हो सकते हैं, क्योंकि कॉफिसस्क्रिप्ट एक सरणी में प्रत्येक पुनरावृत्ति का परिणाम एकत्र कर सकता है, यदि लूप का वापसी मूल्य उपयोग किया जाता है (या यदि यह एक फ़ंक्शन का अंतिम अभिव्यक्ति है)
अरनौद ले ब्लांक

1
मैं सिर्फ एक संदूक के साथ इस मुद्दे था। मैंने कंस्ट्रक्टर की अंतिम पंक्ति में एक फ़ंक्शन को परिभाषित किया। तो यह मेरे "क्लास-फंक्शन" के बजाय वापस आ गया था। मुझे यह स्पष्ट रूप से वापस करना पड़ा। सिर्फ यह कहते हुए कि यह एक मुद्दा हो सकता है।
मार्कस

जवाबों:


150

आपको स्पष्ट रूप से कुछ भी वापस नहीं करना है, या अपने फ़ंक्शन के निचले भाग में अपरिभाषित का मूल्यांकन करने वाली अभिव्यक्ति को छोड़ना है:

fun = ->
    doSomething()
    return

या:

fun = ->
    doSomething()
    undefined

यह वह है जो डॉक्टर की सलाह देता है, जब समझ का उपयोग करते हैं:

सावधान रहें कि आप गलती से इन मामलों में समझ के परिणामों को नहीं लौटा रहे हैं , अपने फ़ंक्शन के निचले हिस्से में सार्थक रिटर्न मान - जैसे कि सच्चा - या अशक्त जोड़कर


हालाँकि, आप इस तरह एक आवरण लिख सकते हैं:

voidFun = (fun) ->
    ->
        fun(arguments...)
        return

( यहां पर आपरेट संचालक को नोटिस दें ...)

और फ़ंक्शंस को परिभाषित करते समय इसका उपयोग करें:

fun = voidFun ->
    doSomething()
    doSomethingElse()

या इस तरह:

fun = voidFun(->
    doSomething()
    doSomethingElse()
)

इस जानकारीपूर्ण उत्तर के लिए धन्यवाद। मैं भी इस बारे में सोच रहा हूं क्योंकि मैं वर्तमान में कॉफ़ीस्क्रिप्ट सीख रहा हूं। मैं उत्सुक हूँ कि क्या आप सबसे अच्छा विकल्प है, या सबसे खराब विकल्प क्या होगा जब मूल्य की वापसी को रोकने पर कुछ प्रकाश डाला जा सकता है? विशेष रूप से, मैं विकल्प जोड़ने के लिए या तो कर रहे हैं कहा गया है return, undefinedया nullमेरी समारोह के अंत में। हालाँकि, जोड़ना nullमुझे किसी कारण से गलत लगता है। क्या मैं इसे तीनों में से सबसे खराब विकल्प मान सकता हूं?
स्टेफमिकेल

2
जावास्क्रिप्ट में रिटर्न स्टेटमेंट (या खाली रिटर्न स्टेटमेंट) के बिना कोई फ़ंक्शन अपरिभाषित होता है, इसलिए सबसे अच्छा विकल्प या तो एक खाली रिटर्न जोड़ना है या undfinedअंत में छोड़ना है । एक खाली returnकथन का उपयोग करने से फ़ंक्शन के अंत में बेहतर रिटर्न देने के लिए कुछ भी नहीं लगता है undefined, इसलिए खाली returnबेहतर विकल्प लगता है।
अरनौद ले ब्लैंक

2
इसके बजाय fun(arguments...), कॉल करना बेहतर होगा fun.apply(this, arguments)
मिगुएल मैडेरो

4
दरअसल, "वापसी" और "अपरिभाषित" विभिन्न जावास्क्रिप्ट उत्पन्न करते हैं। पर का उपयोग करना "Coffeescript प्रयास करें" coffeescript.org , एक देख सकते हैं कि स्पष्ट रूप से "वापसी" coffeescript हटा जावास्क्रिप्ट से बदले में शामिल है; जबकि, "अपरिभाषित" के साथ, जावास्क्रिप्ट फ़ंक्शन "वापसी शून्य 0" के साथ समाप्त होता है;
डैनियल

1
मुझे लगता है कि आपको voidFun से सावधान रहने की आवश्यकता हो सकती है क्योंकि मुझे संदेह है कि आंतरिक फ़ंक्शन अभी भी जो भी चाहता है वह वापस करेगा जो संभवतः प्रदर्शन में गिरावट का कारण बन सकता है।
अट्टुरसम्स

10

हाँ, returnकिसी फ़ंक्शन की अंतिम पंक्ति के रूप में।

उदाहरण के लिए,

answer = () ->
  42

extrovert = (question) -> 
  answer()

introvert = (question) ->
  x = answer()
  # contemplate about the answer x
  return 

यदि आप यह देखना चाहते हैं कि कॉफी किस js को संकलित करती है, तो http://bit.ly/1enKdRl देखें । (मैंने अपने उदाहरण के लिए कॉफ़ीस्क्रिप्ट रीडक्स का उपयोग किया है)


1
मुझे लगता है कि यह अस्वीकार कर दिया गया था क्योंकि यह जवाब शीर्ष-मतदान वाले उत्तर में पहले से ही वहाँ के अलावा किसी भी मूल्य को नहीं जोड़ता है, जो कि इस एक से 2 साल पहले दिया जाता है!
कुमारहर्ष २०'१५ को

5

बस कुछ मजेदार (ctional)

suppressed = _.compose Function.prototype, -> 'do your stuff'

Function.prototypeअपने आप में एक फ़ंक्शन है जो हमेशा कुछ भी नहीं लौटाता है। आप इस ब्लैकहोल में अपने रिटर्न मान को पाइप करने के लिए कंपोज़ का उपयोग कर सकते हैं और रचित फ़ंक्शन कभी भी कुछ भी नहीं लौटाएगा।



-1

ऐसा लगता है कि CoffeeScript में फ़ंक्शंस हमेशा कुछ लौटाना चाहिए, यहां तक ​​कि null। सी में, आपके पास voidरिटर्न प्रकार है। ->, खाली फ़ंक्शन, संकलन करता है (function() {}), इसलिए यह एकमात्र फ़ंक्शन है जो कुछ भी वापस नहीं करता है।


यह सच नहीं है। return;शून्य मान वापस करने के लिए C, JavaScript और CoffeeScript में काम करता है।
yyny
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.