আপনার নিজের 'বিবিধ ব্যবহারগুলি' গ্রন্থাগার রয়েছে? আপনি কোন অংশটি নিয়ে সবচেয়ে বেশি গর্বিত? [বন্ধ]


32

আমি জানি যে আমরা অনেকেই আমাদের নিজস্ব ব্যক্তিগত ব্যক্তিগত গ্রন্থাগারটি আমরা প্রায়শই ব্যবহার করি এমন সরঞ্জাম এবং ইউটিলিটিগুলি দিয়ে রক্ষণ করি।

আমার 16 বছর বয়স থেকেই আমার ছিল তাই এটি যথেষ্ট পরিমাণে বেড়েছে। আমি লেখা কিছু জিনিস ফ্রেমওয়ার্কে যুক্ত করা হয়েছে। আমি লিনকিউ এর অনেক আগে জেনেটিক অ্যালগরিদমগুলির সাথে ব্যবহারের জন্য আমার নিজের এক্সপ্রেশন গাছগুলির সামান্য বাস্তবায়ন লিখেছিলাম, যা আমি বেশ পছন্দ করি এবং সে সময় এটি নিয়ে গর্বিত ছিলাম - অবশ্যই এখন এটি বেশ বেহুদা। তবে সম্প্রতি আমি এর মধ্য দিয়ে যাচ্ছি এবং নেট নেট 4.0.০ এ আপগ্রেড করছি এবং পুনরায় আগ্রহী হয়ে উঠছি।

সুতরাং আপনি কি জন্য আপনার গ্রন্থাগারটি ব্যবহার করবেন তা সম্পর্কে আমি আগ্রহী। সম্ভবত আমরা দরকারী শীতল স্নিপেটগুলির জন্য গিয়ে কিছু দুর্দান্ত ধারণা পেয়েছি এবং সেগুলি আমাদের মাঝে ভাগ করে নিতে পারি।

সুতরাং আমার প্রশ্নগুলি হ'ল:

  • আপনার কি বিবিধ ইউটিলিটি লাইব্রেরি আছে?
  • আপনি কোন অংশটি নিয়ে সবচেয়ে বেশি গর্বিত এবং কেন?

পছন্দ হলে কোডের একটি উদাহরণ দিন :-)


কেউ উত্তর উত্তোলন করছে বলে মনে হচ্ছে না ...
জোয় অ্যাডামস

@ জোয়ে অ্যাডামস ঠিক আছে? বর্তমানে 17 টি প্রশ্ন ভোট এবং মোট 6 টি উত্তর ভোট।
নিকোল

আমি সত্যিকার অর্থে উত্তরগুলি দেখতে পাচ্ছি না। একটি upvote তাদের জন্য অর্থ কি? প্রশ্নের প্রকৃতি এমন যে উত্তরগুলি কেবল একটি "ওহ। দুর্দান্ত" পায়। একধরণের প্রতিক্রিয়া, এবং তারপরে এটি হয় সমস্ত কিছুকে উজ্জীবিত করে বা কিছুই কিছু না। : (। পি আর আমি শুধু কারণ এটা আছে যে উত্তর upvoting যদি চান তাহলে অন্য কিছুই আমি ভোট আছি না।)
আদম লিয়ার

@ আনা লিয়ার, ঠিক আছে, আপনি ক্ষমা করবেন :)
নিকোল

3
যে কোনও শালীন ইউটিলিটি গিথুব এ রাখা উচিত এবং বিশ্বের সাথে ভাগ করা উচিত। এটি সত্যই ভাল থাকলে এটি লুকিয়ে রাখার কোনও মানে হয় না।
কাজ

উত্তর:


27

না।

আমি এক ডজন বিকাশকারীদের কিছু অন্ধবিশ্বাসের প্রভাব দেখেছি যা তারা তাদের নিজস্ব "ইউট.এল" স্টাইলের লাইব্রেরিগুলিকে প্রকল্পগুলিতে যুক্ত করেছে এবং এটি অসামঞ্জস্যপূর্ণ ফাংশন নামকরণ এবং আচরণের বিশাল জগতে পরিণত হয়েছে। অনেকটা পিএইচপি এর মতো। সুতরাং যে কারণে আমি এটি করা এড়ানো।

আমি যখনই সম্ভব সম্ভব প্রোগ্রামিং এনভায়রনমেন্টগুলি ব্যবহার করি যা আমাকে প্রায় সমস্ত সরঞ্জাম এবং লাইব্রেরি দেয় যখন আমার সামনে প্রয়োজন হয়, যেমন সি # এবং পাইথন ব্যবহার করে avoid


7
সাংগঠনিক উদ্দেশ্যে আমি ক্রমাগত আমার গ্রন্থাগারটি পুনরায় লিখি।
ম্যাক্সপাম

3
যেগুলি ক্ষেত্রে ইউসস প্যাকেজটি রাতের স্মৃতিতে পরিণত হয়েছে তার অর্থ এই নয় যে সমস্ত খারাপ। আমি দেখতে পাচ্ছি না আপনি কীভাবে এড়াতে পারবেন এবং এর কারণে আরও কোডের নকল না থাকে। এবং অতএব, খারাপ পরীক্ষা এবং কম দক্ষতা।
নিকোল

2
@ রেনেসিস: ইউটস প্যাকেজগুলি গোটো স্টেটমেন্টের মতোই বিপর্যয়কর। অবশ্যই, এটি নিজে থেকে এটি সমস্ত খারাপ নয়, তবে এটি সম্ভবত সবসময়ই খুব শীঘ্রই বা পরে একটি বিপর্যয় হিসাবে শেষ হয়। কোড ডুপ্লিকেশন হিসাবে, যদি আপনি কার্যত আপনার সমস্ত প্রকল্পে কিছু অনুরূপ কাজ করে দেখেন, তবে অজগর বা সি # এর মতো কিছু জন্য, অন্যান্য লোকেরা সম্ভবত এটিও করেছেন এবং এটি সম্ভবত স্ট্যান্ডার্ড লাইব্রেরিতে রয়েছে।
নাম

6
আমার অভিজ্ঞতা অনুসারে, তাদের নিজস্ব লাইব্রেরি সহ প্রকৌশলীরা সিস্টেম-সরবরাহিত একটির আগে এটি ব্যবহারের পক্ষে হবে, সুতরাং ব্যক্তিগত পাঠাগারগুলি রাখা ভাল অভ্যাস নয়। আমার একবার এক ছেলে ছিল যে পুরোপুরি নিশ্চিত ছিল যে তাঁর 'স্ট্রেন' ফাংশনটি সংকলক-সরবরাহকারীর চেয়ে দ্রুততর , কারণ তিনি এটি লিখেছিলেন । এটি তার পক্ষে সহজভাবে প্রমাণ করেছিল যে সম্ভবত অন্যান্য লোকেরা আরও ভাল করতে পারে তা স্বীকার করার জন্য কীভাবে দু'জন অন্তর্নিহিত সমাবেশের নির্দেশনা দেওয়া হয়েছিল instructions
জেবিআরউইলকিনসন

4
@ জেবিআরউইলকিনসন আপনার বক্তব্যটি ভালভাবেই নিয়েছেন। প্রতিটি প্রোগ্রামার সাধারণ কোড বিকাশ করতে উপযুক্ত নয়।
নিকোল

15

SmartFormat

আমার প্রিয় ইউটিলিটি হ'ল একটি আমি লিখেছি - একটি সাধারণ স্ট্রিং বিল্ডার / ফরম্যাটার যা সঠিক ব্যাকরণের মাধ্যমে ডেটাগুলিকে স্ট্রিংগুলিতে পরিণত করা সত্যিই সহজ করে তোলে।

: উদাহরণস্বরূপ, অধিকাংশ প্রোগ্রামারদের একটি টেমপ্লেট থেকে টেক্সট গড়ে তুলতে "There are {0} items remaining" কিন্তু ব্যাকরণগত ত্রুটি এই বিশালাকার: "There are 1 items remaining"

সুতরাং, SmartFormat আপনি লিখতে দেয়: "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}."। এই রেফারেন্স উল্লেখ করার জন্য ধন্যবাদ।
স্কট রিপ্পি

@ বারজাক আমার বক্তব্যটি যাচাই করার জন্য, যদিও স্মার্টফোর্ডে আরও অনেকগুলি বৈশিষ্ট্য রয়েছে! শর্তসাপেক্ষিক বিন্যাস যে কোনও ডেটা ধরণের জন্য যেমন বুল, তারিখ, টাইমস্প্যান এবং অবজেক্টের জন্য কাজ করে; এটি যেমন উন্নত অপারেটরদের সমর্থন করে "{Count:<0?negative|=5?five|>50&<100?large|other}"। এটা তোলে প্রতিফলন হয়েছে (যেমন "There are {items.Length} items"।, অ্যারে আইটেম এবং timespans ফরম্যাট করতে পারেন তাছাড়া, এটা একটি প্লাগইন মডেল এমনকি আরও বৈশিষ্ট্য সমর্থনের জন্য হয়েছে।
স্কট Rippey

এটি সত্যই শক্তিশালী বলে মনে হচ্ছে। অ্যারে বিন্যাসটি হস্তক্ষেপ করছে।
বারজাক

@ বারজাক: হ্যাঁ, অ্যারে ফর্ম্যাট করা সত্যিই দরকারী! এই উদাহরণটি দেখুন: Smart.Format("There are {0.Count} files: {0:'{}'|, |, and }.", files);ফলাফল হবে "There are 3 files: 'a.txt', 'b.txt', and 'c.txt'."। আমি এটি ছাড়া "স্থানীয়করণ" কল্পনা করতে পারি না।
স্কট রিপ্পি

7

কে কম্বিনেটর (সি #, স্কালা)

আমি রুবিতে কে কম্বিনেটরটি প্রায়শই ব্যবহার করি, বেশিরভাগ ভাঁজগুলিতে যখন ভাঁজ অপারেশনটি কোনও ফেরতের মানের পরিবর্তে পার্শ্ব প্রতিক্রিয়া দ্বারা সঞ্চালিত হয়, যেমন উদাহরণ হিসাবে:

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রুবিতে ডাকা ) উদ্ধারের জন্য:

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

আমি ইতিমধ্যে এটি সি # তে বেশ কয়েকবার মিস করেছি (বেশিরভাগ কারণেই কোনও কারণে সংগ্রহের বিভাজন যেমন: পরিবর্তে List.Addফিরে আসা ) এবং স্কালায়, তাই আমি এটিকে বহন করি:voidthis

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) }

পরিচয় ফাংশন (রুবি)

আমি রুবিতে কিছু হারিয়ে যাচ্ছি, এটি পরিচয় ফাংশনটি অ্যাক্সেস করার একটি দুর্দান্ত নাম way হাস্কেল পরিচয় ফাংশন প্রদান করে id, এর নামে স্কালার নামে identity। এটির মতো কোড লেখার অনুমতি দেয়:

someCollection.groupBy(identity)

রুবির সমতুল্য

some_collection.group_by {|x| x }

জিহ্বা ঠিক রোল করে না, তাই না?

ঠিক আছে

IDENTITY = -> x { x }

some_collection.group_by(&IDENTITY)

ফরইচ (। নেট)

সি # তে আরও একটি খারাপভাবে অনুপস্থিত পদ্ধতি:

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পার্শ্ব-প্রতিক্রিয়াটির ধারণাটি যা লিনকু এর নকশা নীতিগুলির বিরুদ্ধে যায়।
কেওসপ্যান্ডিয়ন

1
@ চাওসপ্যান্ডিয়ন: লিনকুইয়ের সাথে এর কী সম্পর্ক রয়েছে?
Jörg ডব্লু মিট্টাগ

@ জার্গ ডব্লু মিটাগ - IEnumerableএক্সটেনশানগুলি লিনকুইয়ের জন্য যুক্ত করা হয়েছে।
কেওসপ্যান্ডিয়ন

2
@ চাওসপ্যান্ডিয়ন: আমি এখনও বুঝতে পারি না। ForEachলিনকিউ অপারেটর নয়। কেবল লিনকিউ অপারেটরদের ক্ষেত্রে প্রযোজ্য বিধিনিষেধগুলি কেন প্রয়োগ করা উচিত ForEach, যা লিনকিউ অপারেটর নয়? এবং পার্শ্ব-প্রতিক্রিয়াগুলি কেন এর জন্য নিষিদ্ধ IEnumerable.ForEachতবে এর জন্য অনুমোদিত List.ForEach? এছাড়াও, পার্শ্ব-প্রতিক্রিয়াগুলি এর জন্য নিষিদ্ধ IEnumerable.ForEachতবে এর জন্য অনুমোদিত foreach?
Jörg ডব্লু মিট্টাগ

@ জার্গ ডব্লু মিটাগ - আমি যা বলছি তা হ'ল এটি এক্সটেনশানগুলি থেকে হারিয়ে যাওয়া একটি নকশার সিদ্ধান্ত ছিল। সত্য যে 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. অসদৃশ আমি কেন স্বয়ং (UN) বক্সিং আচরণ করে না জানি না (Double) nullযেমন NaN। এটি প্রকৃত সঠিক সমাধান, আইএমএইচও।
জুনাস পুলক্কা

6

আমি যে মিসক কোড লিখেছি তার মধ্যে বেশিরভাগ ভাল স্টাফ এখন সিসিএএন-তে রয়েছে , বাকিটা আমি বিদ্যমান ওপেন সোর্স প্রকল্পগুলির আরও ভাল সংস্করণগুলি খুঁজে পাওয়ার ঝোঁক। আমি নিজেকে আজকাল কম-বেশি সাধারণ-উদ্দেশ্যমূলক "মিসক" কোড লিখছি, এই জাতীয় কোডের অ্যাপ্লিকেশন-নির্দিষ্ট ভেরিয়েন্টগুলি লেখার পক্ষে, বা আমি নিজে প্রকাশ করতে পারি এমন সাধারণ-উদ্দেশ্য মডিউলগুলি লেখার পক্ষে in

সি

এখানে একটি ফাংশন এবং টাইপএফ আমি একাধিকবার ব্যবহার করেছি। অ্যাপ্লিকেশনগুলির জন্য যা সময় প্রয়োজন

#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;
        }
    }
}

Haskell,

হাস্কেলের nub :: (Eq a) => [a] -> [a]ফাংশনটি হ'ল (n²) কারণ ধরণের স্বাক্ষরের দ্বারা, এটি কেবলমাত্র দুটি উপাদান সমান হলে তা পরীক্ষা করার অনুমতি দেয়। একটি সাধারণ ও (এন লগ এন) বিকল্প map head . group . sort, তবে আউটপুট উত্পাদন করার আগে এটির পুরো ইনপুট তালিকাটি জোর করা দরকার, যেখানে এখনই আউটপুট nubউত্পাদন শুরু করা যেতে পারে। নিম্নলিখিতটিতে একটি ও (এন লগ এন) বিকল্প 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)

Haskell, আমি বিকল্প ব্যবহার sequence, mapM, forM, replicateM, এবং filterM। এই ক্রিয়াগুলি প্রতিটি একটি তালিকা উত্পন্ন করে তবে ক্রিয়াটি সম্পূর্ণরূপে শেষ না হওয়া পর্যন্ত তালিকাটি ব্যবহার করা যাবে না (যদি আপনি আইওর মতো কঠোর মোনাড ব্যবহার করছেন)। বিকল্পগুলি থঙ্কসটির একটি টাওয়ার গঠনের পরিবর্তে তালিকার বিপরীতে তালিকা তৈরি করে, যা আমি বেঞ্চমার্কিংয়ের মাধ্যমে কমপক্ষে জিএইচসি দিয়ে দ্রুততর হতে দেখেছি।

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, যদিও আমাকে কিছুটা পক্ষপাতদুষ্ট মনে করা যেতে পারে :)
টিম পোস্ট

4

আমি বিভাজন বাস্তবায়ন বন্ধ করি / আলা পার্ল এর সাথে নেই এমন ভাষায় যোগদান করি join

আমি এটোই এবং আইটোয়াকে সি তে আরও একবার রিম্প্লেলেটেড করেছি (এম্বেড থাকা সিস্টেমের জঞ্জাল)।


4

না।

আমি জাভাতে আমার বেশিরভাগ কোডিং করি এবং সেরা অনুশীলন হ'ল অ্যাপাচি কমন্স লাইব্রেরি এবং অনুরূপ প্রকল্পগুলি থেকে "ইউটগুলি" পুনরায় ব্যবহার করা।

আপনি যদি এটি সম্পর্কে উদ্দেশ্যমূলক হন, তবে খুব কম ক্ষেত্রেই আপনার নিজের "ব্যবহারগুলি" সংগ্রহ অন্যান্য ব্যক্তিরা ইতিমধ্যে যা করেছে তার ক্ষেত্রে উল্লেখযোগ্য উন্নতি হবে improvement এবং যদি এটি কোনও উন্নতি না হয় তবে আপনার ব্যবহারের গ্রন্থাগারটি সম্ভবত বিকাশের সময় নষ্ট করা এবং ভবিষ্যতের রক্ষণাবেক্ষণকারীদের জন্য উপদ্রব / বোঝা।


3

আমার কিছু তারিখের হেরফের ছিল যা আমি জাভা ব্যবহার করে সম্পাদন করেছি, তারপরে আমি জোদাটাইম ব্যবহার শুরু করেছি কারণ আমি এটি সম্পর্কে ভাল জিনিস শুনেছি এবং এটি জাভা 7 তে অন্তর্ভুক্ত করা উচিত (এটি এখনও ঠিক আছে কিনা তা নিশ্চিত নয়, তবে এটি এখনও তা না হলেও ভাল এটি imho ব্যবহার মূল্য)।

এটি প্রায় 50 টি চেইন পদ্ধতি কল সহ একটি 50+ লাইনের শ্রেণিকে এক লাইনে পরিণত করেছে।

অদ্ভুত জন্য এটি প্রতিটি প্রতিদিন তারিখ পেয়ে জড়িত এন একটি সোমবার 10 সপ্তাহ আগে ইত্যাদি ইত্যাদি) জন্য যেমন বিক্রয় চিত্রে: গত সপ্তাহ।

এবং এখানে এটি একটি অংশ

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

জাভাতে এক্সটেনশন পদ্ধতি রয়েছে?
কুগেল

না, তবে আমি মনে করি এটি সম্ভবত সংস্করণ 7
পেয়েছে

2

আমার কাছে সর্বদা utilsকোনও ধরণের প্যাকেজ রয়েছে, এমনকি জাভাতেও, তবে আমার পিএইচপি ব্যবহারের সংগ্রহটি সর্বাধিক পুনরায় ব্যবহৃত হয়। জাভাতে অনেকগুলি ভাল গ্রন্থাগার রয়েছে যে আমার কাছে ইতিমধ্যে প্রকল্পের অন্তর্ভুক্ত একটি গ্রন্থাগার রয়েছে বা কেবলমাত্র আমার নিজের থেকে কিছু হারিয়ে যাওয়া ব্যবহারের নকশা করা দরকার। পিএইচপি গ্রন্থাগারগুলি সেগুলি আমার প্রকল্পগুলিতে অন্তর্ভুক্ত করতে আমার জন্য অনেক বেশি প্রবণতা রয়েছে।

আমি পিএইচপি-র জন্য এই জাতীয় ফাংশনটি পছন্দ করি, স্ট্যাকওভারফ্লোতে সহায়তা দিয়ে পরিমার্জিত ...

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');

অবশ্যই, পিএইচপি হচ্ছে, আমি যতটা সম্ভব লাইটওয়েট হিসাবে পদ্ধতি রাখা যাতে তা না হয় চেয়েছিলেন বেশ BeanUtils যত featureful;)


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

বর্তমানে, না। আমি সি করার সময় আমার একটি ছিল, তবে এখন আমি জাভা করি, এটি সমস্ত স্ট্যান্ডার্ড লিবস উপলব্ধভাবে বিবেচনা করে, সাথে সাথে অ্যাপাচি প্রকল্প থেকে আসা সমস্ত গুডিগুলি বিবেচনা করে না।

আমার সি লিবের দরকারী জিনিসগুলির মধ্যে একটি ছিল দ্রুত এবং নোংরা সীমাবদ্ধ রাষ্ট্রীয় মেশিন বাস্তবায়ন, যা মাত্র দুটি স্ট্রিং এবং স্ট্রিংগুলির একটি অ্যারের সহ সীমাবদ্ধ রাষ্ট্রের মেশিনের সংজ্ঞা দেয়। এটি নিয়মের বিপরীতে স্ট্রিংগুলি পরীক্ষা করতে ব্যবহার করা যেতে পারে (উদাহরণস্বরূপ "অবশ্যই characters..6 অক্ষর দীর্ঘ হতে হবে, প্রথমে একটি অক্ষর হবে, বাকী অঙ্কগুলি হবে"), কিন্তু রেজেক্সগুলির উপস্থিতি সেই জিনিসটিকে সম্পূর্ণ অর্থহীন করে তুলেছে।


1

ডিফারেনশিয়াল এক্সিকিউশন এর ভিত্তিতে গতিশীল ডায়লগ ছাড়া আমি এখন ডেস্কটপ ইউআই লিখতে পারি না । এটি একটি হ্যাক আমি ১৯৮৫ সালের দিকে হোঁচট খেয়েছি, এবং আমি মনে করতে পারি না এর চেয়ে বহুবার এটিকে বিভিন্ন ভাষায় পুনরায় প্রয়োগ করেছি।


1

আমি দেখতে পেলাম আমি জাঙ্গোতে একই কোডটি প্রচুর লিখেছিলাম, এই সাধারণ জিনিসটি করুন, তারপরে এই সাধারণ জিনিসটি এবং শেষ পর্যন্ত সেই সাধারণ জিনিসটি। মূলত ডাটাবেস থেকে এক বা একাধিক আইটেম পান, বা কোনও ফর্মের ফলাফল সংরক্ষণ করুন।

যদি এইগুলির প্রত্যেকটি যদি একবারে একবারে ঘটে থাকে তবে আমি জাজানো জেনেরিক দৃষ্টিভঙ্গি ব্যবহার করতে পারি। দুর্ভাগ্যক্রমে, সেগুলি সত্যই কমপোজ্য নয় এবং আমার ক্রমক্রমে বেশ কয়েকটি জিনিস করা দরকার।

সুতরাং আমি গিয়ে আরও একটি জেনেরিক ভিউ লাইব্রেরি লিখেছিলাম, এটি প্রথমে প্রাসঙ্গিক ক্যোয়ারসেটগুলি (বা যাই হোক না কেন) থেকে ক্রিয়নের তালিকা তৈরি করে কাজ করেছে এবং তারপরে তালিকাটি একটি দৃশ্যে মোড়ক করেছে।

আমার হাতে এখনও কিছু মতামত লিখতে হবে, তবে এগুলি সাধারণত এত জটিল যে এগুলি পুনরায় ব্যবহারযোগ্য us সমস্ত বয়লারপ্লেট কেবল অন্য কোথাও অবতরণ করে, হয় সাধারণ দৃষ্টিভঙ্গি, বা দর্শন সজ্জাকারী হিসাবে (প্রায়শই সজ্জিত জেনেরিক দৃশ্য)। এটি সাধারণত আমার লেখা হ্যান্ডলারের প্রায় 10% হয়ে যায়, যেহেতু কিছু জেনেরিক হ্যান্ডলার অন্য কিছু করতে পারে।


1

হ্যাঁ, তবে কেবল ডোমেন-নির্দিষ্ট আইডিয়াম স্ট্রাকচারের জন্য (যেমন গেম-অবজেক্টস-নির্দিষ্ট পাত্রে)।

জটিল জিনিসগুলির চেয়ে এটি সাধারণ ইউটিলিটি সরঞ্জাম হিসাবে, আমি সেখানে কোনও কিছুর জন্য গর্বিত নই। আমি যাইহোক এই মুহুর্তে অনন্য ব্যবহারকারী তাই গর্ব করার মতো কিছুই নেই।


1

সি ++ অপ্রত্যক্ষ বাছাই, এসটিএল sortএবং একটি ফান্টেক্টর টেম্পলেট ভিত্তিক ।

পরোক্ষভাবে বাছাইয়ের প্রয়োজনীয়তা (যার মধ্যে কাঙ্ক্ষিত আউটপুটটি ক্রমশক্তি সূচকগুলি ছিল যা ডেটা বাছাইয়ের ফলে ঘটেছিল , তবে সাজানো ডাটা নিজেই নয়) বেশ কয়েকটি প্রকল্পে বহুবার উপস্থিত হয়েছিল। আমি সবসময় ভাবতাম কেন এসটিএল এটির জন্য কোনও বাস্তবায়ন সরবরাহ করে না।

আর একটি ছিল সি ++ সাইক্লিক ভেক্টর, যেখানে ইতিবাচক এবং নেতিবাচক সূচকগুলি ভেক্টরের আকারের সাথে মডুলো হয় (যাতে কোনও সংখ্যার মান ভেক্টরের বৈধ সূচক হয়)।


-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.
}

আমার অনুপ্রেরণা প্রপস।



2
ক্যামন, এটা কিছু যায় আসে না।
জোশ কে

1
আপনার বর্তমান ভোট -2 এ, আমি অনুমান করছি এটি সত্যিই গুরুত্বপূর্ণ নয় ...
ব্যবহারকারী 7676

8
চৌর্যবৃত্তি চাটুকার্যের সর্বোচ্চ রূপ, এটি প্রকাশিত হওয়া ব্যতীত।
ম্যাক্সপাম

5
ওয়েল ডাউনভোট বোতামটি বলে: "এই উত্তরটি দরকারী নয়"। আমার ধারণা, একটি অ্যাডিশনাল বোতামের প্রয়োজন আছে: "... তবে অবশ্যই মজাদার"
স্কাজফেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.