গ্রোভিতে ডিফ কখন ব্যবহার করবেন?


23

আমি গ্রোভিতে এখন কিছুক্ষণের জন্য বিকাশ করছি এবং আমি ভাবছি যে ডায়নামিক castালাই আমার কতবার ব্যবহার করা উচিত def? আমার এক সহকর্মী বিশ্বাস করেন যে এটি গ্রোভিকে এমন কোনও উপায়ে সহায়তা করে যা আমি বুঝতে পারি না আমাদের এটি সর্বদা ব্যবহার করা উচিত।

বর্তমানে, পদ্ধতিটি রিটার্নের ধরণ এবং যুক্তিগুলি ঘোষণাকালে, আমি ইচ্ছাকৃতভাবে বলতে চাই যে কোন বিষয়গুলি গ্রহণ করা উচিত এবং থুতু ফেলা উচিত (কোড পঠনযোগ্যতার জন্য এবং আমি জাভা ব্যাকগ্রাউন্ড থেকে এসেছি এটি আমার কাছে বোধগম্য) উদাহরণ:

String doSomething(String something){
    //code
}
// vs
def doSomething(def somthing){
    //code
}
// vs 
def doSomething(somthing){
    // code
}

সুতরাং আমার অনুমান যে আমার প্রশ্নটি কখন ব্যবহার করা উচিত তার একটি অগ্রাধিকার defবা এটি সর্বদা ব্যবহার করার কোনও সত্যিকারের সুবিধা আছে? (আমি শেষ উদাহরণটি যুক্ত করেছি কারণ আমি অনুভব করেছি যে এটি গ্রোভির পক্ষে কার্যকর বিকল্প হিসাবে এই প্রশ্নের সাথে খাপ খায়)


3
আপনার সহকর্মী কী বিশ্বাস করে তা এখানে দেখুন: stackoverflow.com/questions/184002/…
রিমিগিজাস পান্কেভিউয়াস

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

1
ঠিক আছে, আমি এখন আপনার পয়েন্ট দেখতে। এটি জোরালোভাবে টাইপ করা বনাম গতিশীল প্রোগ্রামিং সম্পর্কে একটি প্রশ্ন। আগুনের শিখার যুদ্ধের কারণে আলোচনার
ধরণটি

উত্তর:


20

ভাল প্রোগ্রামিং (এমনকি স্ক্রিপ্টিং) অনুশীলন হিসাবে, সর্বদা একটি ভেরিয়েবলের জন্য একটি নির্দিষ্ট (যদিও প্রয়োজনীয়ভাবে কংক্রিট নয়) টাইপ নির্দিষ্ট করে বিবেচনা করুন। defভেরিয়েবলের জন্য কোনও নির্দিষ্ট প্রকার প্রযোজ্য না হলেই ব্যবহার করুন ।

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

প্রকারের বিষয়ে যতটা সম্ভব সুনির্দিষ্ট হওয়া বাগের সম্ভাবনা হ্রাস করে এবং স্ব-ডকুমেন্টেশন হিসাবে কাজ করে। অন্যদিকে, যদি কেউ ইচ্ছাকৃতভাবে একটি গতিশীল যুক্তি বাস্তবায়ন করে, তবে এটি ব্যবহার করা defবোধগম্য হতে পারে। এটি আসলে গ্রোভির অন্যতম বৃহৎ শক্তি; প্রোগ্রামটি যেমন প্রয়োজন তত গতিশীল বা স্ট্যাটিকালি টাইপ করা যায়! কেবল অলসতা ব্যবহারের কারণ হতে দেবেন না def;-)

উদাহরণস্বরূপ এই পদ্ধতিটি একটি নির্দিষ্ট যুক্তির ধরণ এবং রিটার্নের ধরণের মাধ্যমে বোঝায়:

// def val or Object val, opens up the possibility
// of the caller sending a non-numeric value 
Number half(Number val) {  
    val/2
}

এই পদ্ধতিটি টাইপ দিয়ে বোঝায় def

// I'd let them pass an argument of any type; 
// type `Object` makes sense too
def getIdProperty(def val) {   
    if(val?.hasProperty('id')) {
        // I don't know the type of this returned 
        // value and I don't really need to care 
        return val.id            
    }
    else {
        throw new IllegalArgumentException("Argument doesn't have an 'id' property")
    }
}

-1

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.