क्या आपके पास अपना खुद का 'मिस यूटिल्स लाइब्रेरी' है? आपको किस हिस्से पर सबसे ज्यादा गर्व है? [बन्द है]


32

मुझे पता है कि हम में से कई लोग उपकरण और उपयोगिताओं के साथ अपनी छोटी निजी लाइब्रेरी बनाए रखते हैं जिनका हम अक्सर उपयोग करते हैं।

मेरी उम्र 16 साल की है, इसलिए यह काफी आकार में बड़ा हो गया है। मेरे द्वारा लिखे गए सामान में से कुछ को फ्रेमवर्क में जोड़ दिया गया है। मैंने LINQ से बहुत पहले जेनेटिक एल्गोरिदम के साथ प्रयोग के लिए अभिव्यक्ति के पेड़ों का अपना थोड़ा सा कार्यान्वयन लिखा था, जो मुझे काफी पसंद आया और उस समय गर्व था - बेशक अब इसका बहुत बेकार है। लेकिन हाल ही में मैं इसके माध्यम से जा रहा हूं और .NET 4.0 में अपग्रेड कर रहा हूं और फिर से एक ब्याज दिया है।

इसलिए मैं उत्सुक हूं कि आप अपने पुस्तकालय के लिए क्या उपयोग करते हैं। हो सकता है कि हम उपयोगी छोटे स्निपेट के लिए कुछ शांत विचार प्राप्त कर सकें और उन्हें आपस में साझा कर सकें।

तो मेरे सवाल हैं:

  • क्या आपके पास एक विविध उपयोगिता पुस्तकालय है?
  • आपको किस हिस्से पर सबसे ज्यादा गर्व है और क्यों?

यदि आपको पसंद है तो कोड का एक उदाहरण दें :-)


किसी को भी उत्तोलन नहीं लगता है ...
जॉय एडम्स

@ जोए एडम्स सही? वर्तमान में 17 प्रश्न वोट और 6 कुल उत्तर वोट।
निकोल

मैं वास्तव में उत्थान के लायक जवाब नहीं देख रहा हूं। उनके लिए एक उत्थान का क्या मतलब है? प्रश्न की प्रकृति ऐसी है कि उत्तर केवल एक "ओह। अच्छा है।" प्रतिक्रिया की तरह, और फिर यह सब कुछ या तो कुछ भी नहीं अपवित्र है। (और मुझे हर उत्तर का जवाब देना अच्छा नहीं लगता, क्योंकि अगर कुछ और नहीं है, तो मैं वोटों से बाहर हूं। पी)
एडम लीयर

@ अन्ना लर्न, ठीक है, आप बहाने बना रहे हैं :)
निकोल

3
किसी भी सभ्य उपयोगिता को जीथब पर रखा जाना चाहिए और दुनिया के साथ साझा किया जाना चाहिए। अगर सही मायने में अच्छा है तो इसे छिपाए रखने का कोई मतलब नहीं है।
जॉब

जवाबों:


27

नहीं।

मैंने एक दर्जन डेवलपर्स के कुछ बुरे प्रभाव देखे हैं, जो परियोजनाओं में अपनी छोटी "उपयोग.एच" शैली पुस्तकालयों को जोड़ रहे हैं, और यह असंगत फ़ंक्शन नामकरण और व्यवहार के विशाल गड़बड़ में बदल गया है। बहुत कुछ PHP की तरह। तो उस कारण से मैं इसे करने से बचता हूं।

मैं ऐसा करने की आवश्यकता से बचता हूं, जो प्रोग्रामिंग वातावरण का उपयोग करके मुझे लगभग सभी उपकरण और लाइब्रेरी देता है, जब भी मुझे संभव हो, जैसे कि C # और अजगर।


7
मैं संगठनात्मक उद्देश्यों के लिए अपनी लाइब्रेरी को लगातार लिखता हूं।
मैक्समू

3
मामले जहां बर्तन पैकेज बुरे हो गए हैं इसका मतलब यह नहीं है कि सभी खराब हैं। मैं नहीं देख सकता कि आप इससे कैसे बच सकते हैं और इसकी वजह से अधिक कोड डुप्लीकेशन नहीं है। और इसलिए, बदतर परीक्षण और कम दक्षता।
निकोल

2
@ संदर्भ: बर्तनों के पैकेज गोटो के बयानों के समान विनाशकारी हैं। यकीन है, अपने आप से यह सब बुरा नहीं है, लेकिन यह हमेशा प्रतीत होता है हमेशा एक आपदा जल्दी या बाद में समाप्त होता है। कोड दोहराव के रूप में, यदि आप अपने आप को लगभग सभी परियोजनाओं में अपने समान कार्य करते हुए पाते हैं, तो अजगर या सी # की तरह कुछ के लिए, अन्य लोग शायद यह भी कर रहे हैं और यह तब तक मानक पुस्तकालयों में संभवत: है।
whatsisname

6
मेरे अनुभव में, अपने स्वयं के पुस्तकालय वाले इंजीनियर सिस्टम-प्रदान किए गए एक के आगे इसका उपयोग करने का पक्ष लेंगे, इसलिए व्यक्तिगत पुस्तकालयों का होना अच्छा नहीं है। मेरे पास एक बार एक आदमी था जो पूरी तरह से आश्वस्त था कि उसका 'स्ट्रैलेन' फ़ंक्शन संकलक द्वारा प्रदान किए गए एक से तेज था , क्योंकि उसने इसे लिखा था । यह एक सरल प्रदर्शन था कि कैसे strlen के लिए एक असेंबली विधानसभा निर्देश के एक जोड़े को उसे स्वीकार करना है कि शायद अन्य लोग बेहतर कर सकते हैं।
JBRWilkinson

4
@JBRWilkinson आपकी बात अच्छी तरह से ली गई है। प्रत्येक प्रोग्रामर सामान्य कोड विकसित करने के लिए फिट नहीं है।
निकोल

15

SmartFormat

मेरी पसंदीदा उपयोगिता वह है जिसे मैंने लिखा है - एक साधारण स्ट्रिंग बिल्डर / फॉर्मैटर जो डेटा को सही व्याकरण के साथ तार में बदलना वास्तव में आसान बनाता है।

उदाहरण के लिए, अधिकांश प्रोग्रामर एक टेम्पलेट से पाठ का निर्माण करते हैं: "There are {0} items remaining" लेकिन इससे व्याकरण संबंधी त्रुटियां होती हैं "There are 1 items remaining":।

तो, स्मार्टफार्म आपको लिखने देता है "There {0:is|are} {0} item{0:|s} remaining":।

तुम बस के String.Format(...)साथ बदलें Smart.Format(...)और यह बात है!

SmartFormat कोड खुला स्रोत है: http://github.com/scottrippey/SmartFormat/wiki


यह मेरे द्वारा प्रयुक्त प्रारूप की याद दिलाता है java.text.MessageFormat
बरजक १२’१० को १२:५०

@बारजक दिलचस्प! मैंने लंबे समय तक "सशर्त" स्वरूपण पर शोध किया, और अब तक कभी भी ऐसा कुछ नहीं पाया! MessageFormatहै ChoiceFormatवर्ग है कि एक आश्चर्यजनक रूप से समान वाक्य रचना अनुमति देता है! प्रलेखन से एक उदाहरण "There {0,choice,0#are no files|1#is one file|1<are {0,number,integer} files}.":। इस संदर्भ का उल्लेख करने के लिए धन्यवाद।
स्कॉट रिपी

@barjak मेरी बात को मान्य करने के लिए, हालाँकि, स्मार्टफ़ॉर्म की कई और विशेषताएं हैं! सशर्त स्वरूपण किसी भी डेटा प्रकार के लिए काम करता है, जैसे कि बूल, तिथि, समय और वस्तु; यह उन्नत ऑपरेटरों का भी समर्थन करता है, जैसे कि "{Count:<0?negative|=5?five|>50&<100?large|other}"। इसमें प्रतिबिंब है (यानी "There are {items.Length} items", सरणी आइटम और टाइमपास कर सकते हैं। प्लस, इसमें और भी अधिक सुविधाओं का समर्थन करने के लिए एक प्लगइन मॉडल है।
स्कॉट रिपी

यह वास्तव में शक्तिशाली प्रतीत होता है। सरणियाँ स्वरूपण अंतरापृष्ठ है।
बरजक

@barjak: हाँ, सरणी स्वरूपण वास्तव में उपयोगी है! इस उदाहरण को देखें: इसमें Smart.Format("There are {0.Count} files: {0:'{}'|, |, and }.", files);परिणाम होगा "There are 3 files: 'a.txt', 'b.txt', and 'c.txt'."। मैं इसके बिना "स्थानीयकरण" की कल्पना नहीं कर सकता।
स्कॉट रिपी

7

के कॉम्बिनेटर (C #, स्काला)

मैं रूबी में के कॉम्बिनेटर का उपयोग अक्सर करता हूं, ज्यादातर गुना में जब तह ऑपरेशन एक वापसी मूल्य के बजाय एक साइड इफेक्ट के माध्यम से किया जाता है, जैसे कि इस उदाहरण में:

some_collection.reduce(Hash.new(0)) {|acc, el| acc[el] += 1 }

यह गणना करता है कि प्रत्येक तत्व कितनी बार होता है some_collection। दुर्भाग्य से, यह वास्तव में काम नहीं करता है, क्योंकि ब्लॉक को प्रत्येक पुनरावृत्ति पर संचायक के नए मूल्य को वापस करना पड़ता है, लेकिन रूबी असाइनमेंट में निर्धारित मूल्य का मूल्यांकन करते हैं।

इसलिए, आपको संचयकर्ता के नए मान को इस तरह वापस करना होगा:

some_collection.reduce(Hash.new(0)) {|acc, el| acc[el] += 1; acc }

लेकिन मुझे इस कार्यात्मक-ईश शैली में इस तरह के स्पष्ट अनुक्रमण का पता चलता है सिलवटों का उपयोग करना। Object#tapबचाव के लिए K कॉम्बिनेटर ( रूबी में कहा जाता है):

some_collection.reduce(Hash.new(0)) {|acc, el| acc.tap { acc[el] += 1 }}

मैंने पहले ही इसे C # में कई बार याद किया है (ज्यादातर इसलिए कि किसी कारण से संग्रह म्यूटेटर जैसे कि List.Addवापसी के voidबजाय this) और स्काला, इसलिए मैं इसे लेकर चलता हूं:

namespace GenericExtensions
{
    public static class GenericExtensions
    {
        public static T Tap<T>(this T o, Action<T> f)
        {
            Contract.Requires(o != null);
            Contract.Requires(f != null);

            f(o);
            return o;
        }

        public static T Tap<T>(this T o, Action f)
        {
            Contract.Requires(o != null);
            Contract.Requires(f != null);

            f();
            return o;
        }
    }
}

और स्काला में:

class Tap[T](o: T) {
  def tap(f: T => Unit) = { f(o); o }
  def tap(f: => Unit) = { f; o }
}

object Implicits { implicit def any2Tap[T](o: T) = new Tap(o) }

पहचान समारोह (रूबी)

मैं रूबी में कुछ याद कर रहा हूं, पहचान समारोह तक पहुंचने का एक अच्छा नाम है। हास्केल, के नाम पर id, स्काला के नाम से पहचान समारोह प्रदान करता है identity। यह एक को कोड लिखने की अनुमति देता है जैसे:

someCollection.groupBy(identity)

रूबी में बराबर है

some_collection.group_by {|x| x }

बिल्कुल जीभ से नहीं लुढ़कता है?

तय है

IDENTITY = -> x { x }

some_collection.group_by(&IDENTITY)

ForEach (.NET)

C # में एक और ग़ायब तरीक़ा:

namespace IEnumerableExtensions
{
    public static class IEnumerableExtensions
    {
        public static void ForEach<T>(this IEnumerable<T> xs, Action<T> f)
        {
            Contract.Requires(xs != null);
            Contract.Requires(f != null);

           foreach (var x in xs) f(x);
        }
    }
}

3
मुझे लगता है कि आपका अंतिम उदाहरण एक गणना डिज़ाइन निर्णय था। इसका Actionतात्पर्य LINQ के डिजाइन सिद्धांतों के खिलाफ जाने वाले साइड-इफेक्ट्स से है।
चोसपांडियन 18

1
@ChaosPandion: LINQ के साथ इसका क्या करना है?
जोर्ग डब्ल्यू मित्तग

@ Jörg W Mittag - IEnumerableLINQ के लिए एक्सटेंशन जोड़े गए।
चोसपंडियन

2
@ पेटोसपंडियन: मुझे अभी भी समझ नहीं आया है। ForEachLINQ ऑपरेटर नहीं है। जो प्रतिबंध केवल LINQ ऑपरेटरों पर लागू होते हैं ForEach, उन पर क्यों लागू होने चाहिए , जो LINQ ऑपरेटर नहीं है? और क्यों साइड-इफेक्ट्स के लिए मना किया जाता है IEnumerable.ForEachलेकिन इसके लिए अनुमति दी जाती है List.ForEach? इसके अलावा, साइड-इफेक्ट्स के लिए मना क्यों किया जाता है IEnumerable.ForEachलेकिन इसके लिए अनुमति दी जाती है foreach?
जोर्ग डब्ल्यू मित्तग

@ Jörg W Mittag - मैं जो कह रहा हूं वह तथ्य यह है कि यह एक्सटेंशन से गायब है यह एक डिजाइन निर्णय था। तथ्य यह है कि List<T>एक ForEachउचित विचार है कि यह एक परिवर्तनशील प्रकार है।
चाओसपांडियन

6

मेरे पास एक जावा टाइप कन्वर्टर है। यह एक सार्वजनिक हस्ताक्षर है

public static <T> T convert(Object sourceValue, Class<T> destinationType)

और यह स्रोत के मूल्य को गंतव्य प्रकार में परिवर्तित करने की पूरी कोशिश करता है। यह अनिवार्य रूप से आपको सांख्यिकीय रूप से टाइप की गई भाषा के भीतर गतिशील टाइपिंग करने देता है :-)

यह बॉक्सिंग न्यूमेरिक प्रकारों के साथ वास्तव में उपयोगी है। यह कितना परेशान करने वाला है कि आप उम्मीद नहीं रख सकते कि यह Integerकहाँ Longहै? कोई बात नहीं, बस इसे कन्वर्ट करें। या क्या होगा यदि आपका कार्य एक की उम्मीद करता है double, लेकिन आपको nullवहां रखना होगा? कबूम, एक एनपीई। लेकिन यह माध्यम से डाल convert, और आप एक मिल NaN


दिलचस्प समाधान। मैंने हमेशा सोचा है कि लॉन्ग को इंटीजर का विस्तार करना चाहिए। लेकिन तब भी आपको ऑटोबॉक्सिंग की समस्या होगी (जहाँ तक मुझे पता है कि ऑटोबॉक्सिंग विरासत के साथ काम नहीं करेगा)। इसके अलावा, NaNसमर्थन के लिए +1 ।
निकोल

NaNउत्तम है। बहुत बुरा है कि पूर्णांक के लिए ऐसी कोई बात नहीं है। मैंने Integer.MIN_VALUEएक सम्मेलन के रूप में उपयोग किया है। यह आमतौर पर "अजीब पर्याप्त" है, जिसे डिफ़ॉल्ट मान के विपरीत देखा जा सकता है। 0. मैं नहीं जानता कि ऑटो (अन) बॉक्सिंग के (Double) nullरूप में इलाज क्यों नहीं करता है NaN। यह स्पष्ट सही समाधान है, IMHO।
जूनस पुलकका

6

मेरे द्वारा लिखे गए misc कोड में, अधिकांश अच्छे सामान अब CCAN में हैं, जबकि बाकी मैं मौजूदा ओपन सोर्स प्रोजेक्ट्स के बेहतर संस्करणों को खोजने के लिए हैं। मैं इन दिनों अपने आप को कम और कम सामान्य-उद्देश्य "मिस" कोड लिख रहा हूं, ऐसे कोड के एप्लिकेशन-विशिष्ट वेरिएंट लिखने के पक्ष में, या सामान्य-उद्देश्य मॉड्यूल लिखने के लिए जो मैं खुद जारी कर सकता हूं।

सी

यहाँ एक फंक्शन और टाइपडीफ है जिसका मैंने एक से अधिक बार उपयोग किया है। ऐसे अनुप्रयोगों के लिए जिन्हें समय की आवश्यकता होती है, सादगी के मामले में मिलीसेकंड को हराना कठिन है:

#include <stdint.h>
#include <sys/time.h>

typedef int64_t msec_t;

static msec_t time_ms(void)
{
    struct timeval tv;
    gettimeofday(&tv, NULL);
    return (msec_t)tv.tv_sec * 1000 + tv.tv_usec / 1000;
}

और अधिक विविध सी फ़ंक्शन जिन्हें मैं बार-बार उपयोग करता हूं (और अधिक):

/* Remove a trailing newline, if present. */
void chomp(char *buffer)
{
    if (!*buffer)
        return;

    while (*buffer)
        buffer++;

    if (buffer[-1] == '\n')
        buffer[-1] = 0;
}

/*
 * Skip whitespace, update the pointer, and return it.
 * Example:
 *
 * switch (*skipSpace(&s)) {
 *     case '\0':
 *         ...
 *     case '(':
 *         ...
 */
const char *skipSpace(const char **sptr)
{
    const char *s = *sptr;
    while (isspace(*s))
        s++;
    *sptr = s;
    return s;
}

/* Scramble an array of items uniformly. */
void scramble(void *base, size_t nmemb, size_t size)
{
    char *i = base;
    char *o;
    size_t sd;
    for (;nmemb>1;nmemb--) {
        o = i + size*(rand()%nmemb);
        for (sd=size;sd--;) {
            char tmp = *o;
            *o++ = *i;
            *i++ = tmp;
        }
    }
}

हास्केल

हास्केल का nub :: (Eq a) => [a] -> [a]कार्य हे (n²) है, क्योंकि इसके प्रकार के हस्ताक्षर के द्वारा, यह परीक्षण करने की अनुमति है कि क्या दो तत्व समान हैं। एक साधारण O (n लॉग एन) विकल्प है map head . group . sort, लेकिन इसे आउटपुट से पहले पूरी इनपुट सूची के लिए मजबूर करना पड़ता है, जबकि nubतुरंत आउटपुट का उत्पादन शुरू कर सकता है। निम्नलिखित एक O (n log n) विकल्प है nubजो पहले से ही देखी गई वस्तुओं को एक में एकत्रित करता है Data.Set:

module Nub (nub') where

import Prelude
import Data.Set (empty, member, insert)

nub' :: Ord a => [a] -> [a]
nub' xs = loop xs empty where
    loop [] _ = []
    loop (x:xs) set =
        if x `member` set
            then loop xs set
            else x : loop xs (insert x set)

हास्केल में, मैं के लिए विकल्प का उपयोग sequence, mapM, forM, replicateM, और filterM। ये क्रियाएं प्रत्येक सूची को उत्पन्न करती हैं, लेकिन सूची का उपयोग तब तक नहीं किया जा सकता है जब तक कि कार्रवाई पूरी तरह से पूरी न हो जाए (यदि आप IO जैसे सख्त मोनाड का उपयोग कर रहे हैं)। विकल्प सूची को थ्रो का टॉवर बनाने के बजाय रिवर्स में बनाते हैं, जो मुझे बेंचमार्किंग के माध्यम से कम से कम जीएचसी के साथ मिला।

sequence' :: Monad m => [m a] -> m [a]
sequence' ms = loop ms [] >>= return . reverse where
    loop []     xs = return xs
    loop (m:ms) xs = do
        x <- m
        loop ms (x:xs)

mapM' :: Monad m => (a -> m b) -> [a] -> m [b]
mapM' f xs = sequence' $ map f xs

forM' :: Monad m => [a] -> (a -> m b) -> m [b]
forM' = flip mapM'

replicateM' :: Monad m => Int -> m a -> m [a]
replicateM' n x = sequence' (replicate n x)

filterM' :: Monad m => (a -> m Bool) -> [a] -> m [a]
filterM' pred xs = loop xs [] >>= return . reverse where
    loop []     xs' = return xs'
    loop (x:xs) xs' = do
        keep <- pred x
        loop xs (if keep then (x:xs') else xs')

नोट: sequence_, mapM_, forM_, और replicateM_कार्यों अभी भी एक बेहतर विकल्प है यदि आप परिणाम सूची में कोई दिलचस्पी नहीं कर रहे हैं।


+1 CCAN के लिए, हालांकि मैं माना जा सकता है थोड़ा पक्षपाती :)
टिम पोस्ट

4

मैं उन भाषाओं में विभाजित / शामिल होने को लागू करता हूं, जिनके पास यह नहीं है।

मैंने सी और एटॉइ को पुन: लागू किया है, सी में अधिक बार मैं इसके बारे में सोचना चाहता हूं (एम्बेडेड सिस्टम जंक)।


4

नहीं।

मैं अपने अधिकांश कोडिंग जावा में करता हूं, और सबसे अच्छा अभ्यास अपाचे कॉमन्स पुस्तकालयों और इसी तरह की परियोजनाओं से "बर्तनों" का पुन: उपयोग करना है।

यदि आप इसके बारे में वस्तुनिष्ठ हैं, तो कुछ मामले हैं जहाँ आपके "बर्तनों" संग्रह में अन्य लोगों द्वारा पहले से ही किए गए एक महत्वपूर्ण सुधार होगा। और अगर यह एक सुधार नहीं है, तो आपका बर्तन पुस्तकालय शायद विकास के समय की बर्बादी है, और भविष्य के रखरखाव के लिए एक उपद्रव / बोझ है।


3

मेरे पास कुछ दिनांक जोड़तोड़ थे जो मैंने जावा का उपयोग करते हुए किए थे, फिर मैंने JodaTime का उपयोग करना शुरू कर दिया था क्योंकि मैंने इसके बारे में अच्छी बातें सुनी थीं और इसे जावा 7 में शामिल किया जाना था (निश्चित रूप से अगर यह अभी भी मामला है, लेकिन तब भी अगर यह अभी भी नहीं है अच्छी तरह से यह imho का उपयोग कर)।

इसने एक पंक्ति में 50+ लाइन क्लास को तीन पंक्तिबद्ध विधि कॉल के साथ बदल दिया।

जिज्ञासु के लिए इसके बारे में प्रत्येक दिन के लिए तारीख हो रही शामिल n एक सोमवार 10 हफ्ते पहले आदि आदि) के लिए जैसे बिक्री आंकड़ा: पिछले सप्ताह।

और यहाँ इसका हिस्सा है

public static DateTime getDayPreviousWeek(DateTime dt, DayOfWeek dayOfWeek, int n_weeks) {
       return dt.minusWeeks(n_weeks).dayOfWeek().setCopy(dayOfWeek.getDayAsString());
}

जावा में विस्तार विधियाँ हैं?
कुगेल

नहीं, लेकिन मुझे लगता है कि यह उन्हें 7 के संस्करण में मिल रहा होगा
NimChimpsky

2

मेरे पास हमेशा utilsजावा में भी कुछ प्रकार का एक पैकेज होता है , लेकिन मेरे PHP के बर्तनों का संग्रह सबसे अधिक पुन: उपयोग किया जाता है। जावा में बहुत सारे अच्छे पुस्तकालय हैं, कि मेरे पास पहले से ही परियोजना में शामिल एक पुस्तकालय है या बस अपने आप ही कुछ लापता बर्तनों को डिजाइन करने की आवश्यकता है। PHP लाइब्रेरीज़ मुझे अपनी परियोजनाओं में शामिल करना चाहते हैं।

मैं PHP के लिए इस समारोह की तरह, StackOverflow पर मदद से परिष्कृत ...

function getValueFromDotKey(&$context, $name) {
    $pieces = explode('.', $name);
    foreach ($pieces as $piece) {
        if (!is_array($context) || !array_key_exists($piece, $context)) {
            // error occurred
            return null;
        }
        $context = &$context[$piece];
    }
    return $context;
}

यह जावा के लिए अपाचे के बीनयुटिल्स के समान है, और मैं इसे एक समान उद्देश्य के लिए उपयोग करता हूं, जो टेम्पलेट भाषा में एक एकल कुंजी के रूप में तत्व देता है जो स्रोत सरणी में एक नेस्टेड मान प्राप्त / सेट कर सकता है:

$source = array('a' => array('b' => 5));

$val = getValueFromDotKey($source, 'a.b');

बेशक, PHP होने के नाते, मैं इस विधि को जितना संभव हो उतना हल्का रखना चाहता था, क्योंकि यह बीन्यूटिल्स के रूप में काफी उपयोगी नहीं है;)


2

स्काला मानक पुस्तकालय में कुछ सबसे अधिक इस्तेमाल किए जाने वाले उच्च क्रम के कार्यों का अभाव है।

दो ऐसे कार्य जिनकी मुझे सबसे अधिक आवश्यकता है:

// #1: unfold
def unfold[T, R](init: T)(f: T => Option[(R, T)]): List[R] = f(init) match {
  case None => Nil
  case Some(r, v) => r :: unfold(v)(f)
}

// #2: zipWith
def zipWith[A, B, C](xs: List[A], ys: List[B])(f: (A, B) => C): List[C] = {
  (xs, ys).zipped.map(f)
}

1

वर्तमान में नहीं। मेरे पास एक था जब मैं सी कर रहा था, लेकिन अब जब मैं जावा करता हूं, तो इसका कोई मतलब नहीं है, सभी मानक कामों को उपलब्ध करने पर विचार करना, साथ ही अपाचे परियोजना से आने वाले सभी उपहार।

मेरी सी लिब में उपयोगी चीजों में से एक त्वरित और गंदे परिमित राज्य मशीन कार्यान्वयन था, जिसने केवल दो तारों और तार की एक सरणी के साथ एक परिमित राज्य मशीन की परिभाषा की अनुमति दी थी। इसका उपयोग नियमों के खिलाफ तार की जांच करने के लिए किया जा सकता है (उदाहरण के लिए "4..6 वर्ण लंबा, पहले एक अक्षर, बाकी अंक") होना चाहिए, लेकिन regexes की उपलब्धता ने उस चीज़ को पूरी तरह से व्यर्थ कर दिया।


1

मैं विभेदक निष्पादन पर आधारित डायनेमिक संवादों के बिना अब डेस्कटॉप यूआई नहीं लिख सकता । यह एक हैक है जिसे मैंने लगभग 1985 में ठोकर खाई थी, और मैंने इसे विभिन्न भाषाओं में इसे फिर से लागू किया है जितना मैं याद रख सकता हूं।


1

मैंने पाया कि मैं django में एक ही कोड का एक बहुत लिख रहा था, यह आम बात है, तो यह आम बात है, और अंत में वह आम बात है। मूल रूप से डेटाबेस से एक या अधिक आइटम प्राप्त करते हैं, या एक फॉर्म के परिणामों को बचाते हैं।

अगर इनमें से हर एक चीज सिर्फ एक बार देखने में आती है, तो मैं django जेनेरिक विचारों का उपयोग कर सकता हूं। दुर्भाग्य से, वे वास्तव में रचना नहीं कर रहे हैं, और मुझे अनुक्रम में कई चीजें करने की जरूरत है।

इसलिए मैंने जाकर एक और अधिक सामान्य विचार पुस्तकालय लिखा, एक जो पहले प्रासंगिक क्वेरी (या जो भी) से कार्यों की एक सूची का निर्माण करके काम करता था, और फिर सूची को एक दृश्य में लपेट दिया।

मुझे अभी भी हाथ से कुछ विचार लिखना है, लेकिन ये आमतौर पर पर्याप्त जटिल हैं कि उनमें पुन: प्रयोज्य नहीं है। बॉयलरप्लेट के सभी अन्य जगहों पर या तो एक सामान्य दृश्य, या एक दृश्य सज्जाकार के रूप में (अक्सर एक सजाया सामान्य दृश्य)। यह आमतौर पर मेरे द्वारा लिखे गए लगभग 10% हैंडलर को समाप्त करता है, क्योंकि कुछ सामान्य हैंडलर बाकी सब कुछ कर सकते हैं।


1

हां, लेकिन केवल डोमेन-विशिष्ट मुहावरों संरचनाओं के लिए (जैसे गेम-ऑब्जेक्ट्स-विशिष्ट कंटेनर)।

जैसा कि यह कुछ भी जटिल से सरल उपयोगिता उपकरण है, मुझे वहां कुछ भी गर्व नहीं है। मैं वैसे भी इस समय अद्वितीय उपयोगकर्ता हूं इसलिए गर्व करने की कोई बात नहीं है।


1

C ++ अप्रत्यक्ष प्रकार, STL sortऔर एक फ़ंक्शनल टेम्पलेट पर आधारित है ।

अप्रत्यक्ष छँटाई की आवश्यकता (जिसमें वांछित आउटपुट क्रमपरिवर्तन सूचकांक था जो डेटा को सॉर्ट करने के परिणामस्वरूप होगा, लेकिन स्वयं सॉर्ट किए गए डेटा नहीं ) कई बार कई परियोजनाओं में दिखाई दिया। मैं हमेशा सोचता था कि एसटीएल ने इसके लिए कोई कार्यान्वयन क्यों नहीं दिया।

एक और सी + + चक्रीय वेक्टर था, जहां सकारात्मक और नकारात्मक सूचकांक वेक्टर आकार के साथ modulo होते हैं (ताकि कोई पूर्णांक मान वेक्टर के लिए मान्य अनुक्रमित हो)।


-4

जब मैंने अपने कंप में जावा विकास कर रहा था, तब मैंने एक छोटा सा बर्तन पैकेज लिखा था। हाई स्कूल में विज्ञान वर्ग। मुझे अपने यादृच्छिक संख्या जनरेटर पर सबसे अधिक गर्व है।

/**
* Returns a random integer.
*
* @returns    int    Random integer
*/
public static int getRandom()
{
    return 4; // Chosen by a fair dice roll.
              // Guaranteed to be random.
}

मेरी प्रेरणा का सहारा है।


12
c'mon, xkcd ....
Darknight

2
चलो, यह कोई फर्क नहीं पड़ता।
जोश के

1
-2 में आपके वर्तमान वोटों के साथ, मैं अनुमान लगा रहा हूं कि यह वास्तव में मायने रखता है ...
user7676

8
साहित्यिक चोरी चापलूसी का उच्चतम रूप है, सिवाय इसके कि जब यह स्पष्ट हो।
मैक्समू

5
वैसे डाउनवोट बटन कहता है: "यह उत्तर उपयोगी नहीं है"। मुझे लगता है कि एक विशेष बटन की आवश्यकता है: "... लेकिन निश्चित रूप से मजाकिया है"
skajfes
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.