জাভাতে `this` কীওয়ার্ডটি ব্যবহারের জন্য গৃহীত স্টাইলটি কী?


37

আমি পাইথন বা জাভাস্ক্রিপ্টের মতো ভাষা থেকে এসেছি (এবং অন্যান্য যেগুলি কম অবজেক্ট-ভিত্তিক) এবং আমি জাভা সম্পর্কে আমার জ্ঞান সম্পর্কে জ্ঞানকে উন্নত করার চেষ্টা করছি, যা আমি কেবলমাত্র একটি অতিমাত্রায় জানি।

এটি কি সর্বদা thisবর্তমান দৃষ্টান্তের বৈশিষ্ট্যগুলিতে সংশোধন করা খারাপ অভ্যাস হিসাবে বিবেচিত হয়? এটি আমার কাছে আরও স্বাভাবিক মনে হয়

...
private String foo;

public void printFoo() {
    System.out.println(this.foo);
}
...

চেয়ে

...
private String foo;

public void printFoo() {
    System.out.println(foo);
}
...

যেহেতু এটি আমাকে স্থানীয় ভেরিয়েবল থেকে উদাহরণ বৈশিষ্ট্যগুলি পৃথক করতে সহায়তা করে।

অবশ্যই জাভাস্ক্রিপ্টের মতো ভাষায় এটি সর্বদা ব্যবহার thisকরা আরও বেশি অর্থবোধ করে, যেহেতু কারও বেশি ফাংশন বাসা থাকতে পারে, তাই স্থানীয় ভেরিয়েবলগুলি বৃহত্তর স্কোপ থেকে আসে। জাভাতে, আমি যতদূর বুঝতে পেরেছি, এর মতো কোনও বাসা বাঁধাই সম্ভব নয় (অভ্যন্তরীণ শ্রেণি বাদে), তাই সম্ভবত এটি কোনও বড় সমস্যা নয়।

যাই হোক না কেন, আমি ব্যবহার করতে পছন্দ করব this। এটি কি অদ্ভুত এবং মূর্খ না অনুভব করবে?


আমরা আমাদের কোম্পানিকে স্ট্যাডার্ডাইজ করার জন্য একটি সরঞ্জাম ব্যবহার করি। সংস্থার নীতি উপর নির্ভর করে এ ছাড়া আমাদের সাথে সরঞ্জামটি পুনরায় লিখন করে। সুতরাং যে কারও কোড কীভাবে তারা পছন্দ করে এবং কমিটের সময় কোডটি সঠিকভাবে ফর্ম্যাট করা হয়।
ডেডালনিক্স

2
"যেহেতু কারও বেশি ফাংশন বাসা থাকতে পারে, সেহেতু বৃহত্তর স্কোপ থেকে স্থানীয় ভেরিয়েবল আসে coming" এছাড়াও, জাসদের কোনও ক্রিয়াকলাপে "এই" আসলে কোনও জায়গা নয় যেখানে অযোগ্য ভেরিয়েবল আসতে পারে।
র্যান্ডম 832

2
আমি আন্ডারস্কোর সহ সমস্ত ইনস্ট্যান্স ভেরিয়েবলগুলি উপসর্গ করেছি যাতে আমি সহজেই ব্যবহার না করে স্থানীয় এবং উদাহরণ ভেরিয়েবলের মধ্যে পার্থক্যটি বলতে পারি this
WuHoUnited

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

উত্তর:


40

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

এটা সত্যিই বেশ বাজে।


7
এছাড়াও: একটি বুদ্ধিমান আইডিই ক্ষেত্র এবং স্থানীয় ভেরিয়েবলগুলি / পরামিতিগুলিকে দৃশ্যত পৃথক করে তোলে should উদাহরণস্বরূপ Eclipse এ (ডিফল্টরূপে) ক্ষেত্রগুলি নীল, যখন স্থানীয় ভেরিয়েবলগুলি কালো।
জোছিম সাউর

1
@ জোয়াচিম নিস পয়েন্ট, গ্রামীণ এমনকি প্যারামিটার এবং স্থানীয় ভেরিয়েবলগুলি আলাদাভাবে রঙ করতে পারে যদি ব্যবহারকারী চান (এটি অবশ্য পূর্বনির্ধারিত নয়)।
এরিক-কার্ল

3
যদিও আমি সম্মত, অন্য বিকাশকারীদের কোড জুড়ে (এবং প্রথম নজরে অপরিচিত থাকার সময়) আমি this.অনেক বেশি সহায়ক বলে মনে করি। এটি সম্ভবত কারণ আমার কোনও আইডিই নেই যা রঙিন কোডগুলি স্থানীয় / অবজেক্ট ভেরিয়েবলকে আলাদাভাবে দেয়।
ব্র্যাড ক্রিস্টি

3
জন্য +1 (ভাষান্তর) "refactor আপনি ব্যবহার করতে প্রয়োজন হলে এই অনুমান যে এটা সদস্য এর"। শুধু আমি কি নির্দেশ করতে চেয়েছিলেন।
ইয়াম মার্কোভিচ

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

26

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

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

আমি বিশ্বাস করি যে ক্রিসএফের শেষ বাক্যটি মারা গেছে: আপনার ব্যবহারের সাথে সামঞ্জস্য বজায় রাখুন


7
"অন্যান্য বিকাশকারীদের ক্ষেত্রে ভেরিয়েবলের সুযোগ সম্পর্কে এটি মোটামুটি দৃ strong় অনুস্মারক।" - যে কারণে আমি ব্যবহার করতে পছন্দ করি এবং কোডটিতে দেখতে পছন্দ করি this.। লেখার জন্য আধা সেকেন্ড সময় নেয় এবং দীর্ঘ মুহূর্তগুলি সংরক্ষণ করতে পারে যখন আপনি আগে লোকটি উট-কেস স্থানীয় পরিবর্তে প্যাস্কেল-কেস সম্পত্তিটি ব্যবহার করতে চেয়েছিলেন কিনা সে যখন শেষ মুহুর্তে 20 টি সংশোধন আগে এই মুহুর্তটি পরিবর্তন করেছিল।
scrwtp

18

আমি ধারাবাহিকভাবে 'এটি' ব্যবহার করি এমন একটি জায়গা সেটার এবং বা কনস্ট্রাক্টর:

public void setFoo(String foo) {
    this.foo = foo;
}

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

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

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

সম্পাদনা করুন: আমি সমান, ক্লোন বা একই বস্তুর ধরণের একটি 'যে' পরামিতি রয়েছে এমন কোনও কিছুতে এটি ব্যবহার করে শেষ করি:

public boolean isSame(MyClass that) {
    return this.uuid().equals(that.uuid());
}

8

এটা বিতর্কযোগ্য

সি এর সাথে একটি সাদৃশ্য হিসাবে গ্রহণ করা thisজাভাটির সাথে একেবারে অনুরূপ বাক্য গঠন এবং কাঠামো রয়েছে বলে আমরা দেখতে পেলাম যে সি # স্টাইলকপের একটি ডিফল্ট নিয়ম রয়েছে যা আপনাকে যুক্ত করার জন্য জোর দিয়েছিল , তবে রিশার্পারের একটি ডিফল্ট নিয়ম রয়েছে যা বলে যে এটি thisরিডানড্যান্ট (যা এটি) এবং হতে পারে সরানো হয়েছে।

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

যাইহোক, বিধিগুলি বলতে যা বোঝায় তা হ'ল আপনি নিজের ব্যবহারের সাথে সামঞ্জস্যপূর্ণ - যা সম্ভবত সবচেয়ে গুরুত্বপূর্ণ বিষয়।


8

এটি কি সর্বদা বর্তমান দৃষ্টান্তের বৈশিষ্ট্যগুলিতে প্রিপেন্ড করা খারাপ অভ্যাস হিসাবে বিবেচিত হয়?

হ্যাঁ - কিছু দ্বারা, না - অন্যদের দ্বারা।

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


7

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

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

আমি মনে করি যে "এই" সবেমাত্র বিশৃঙ্খল কোড। বিশেষত আধুনিক আইডিইগুলির সাথে যা স্থানীয় পরামিতি / স্থানীয় ভেরিয়েবল / ক্ষেত্রগুলিকে আলাদাভাবে রঙ করবে।


5

আমি মনে করি আপনি এটি দিয়ে আপনার নিজের প্রশ্নের উত্তর দিয়েছেন :

এটি আমার কাছে আরও স্বাভাবিক মনে হয়

... এই ...

চেয়ে

... ফু ...

যেহেতু এটি আমাকে স্থানীয় ভেরিয়েবল থেকে উদাহরণ বৈশিষ্ট্যগুলি পৃথক করতে সহায়তা করে।

আপনি যদি this.জাভা দিয়ে আপনার জ্ঞানসম্পন্ন জ্ঞানের উন্নতি করার সময় যদি আরও স্বাচ্ছন্দ্য বোধ করেন তবে তা যেকোনো উপায়ে জিনিসটি ব্যবহার করুন ( আমার মনে হয় এটি একরকমভাবে, আপনি পরিচিত পাইথন স্ব যার সাথে আপনি সম্পর্কযুক্ত )।

জিনিসটি হ'ল, যদিও লোকেরা ব্যবহার বা ব্যবহার না করার বিষয়ে দৃ /় / প্রাসঙ্গিক যুক্তি দেবে this., তবুও এটি বিতর্কের মতো শোনাচ্ছে, উদাহরণ দেওয়া হয়েছে:

  • এটি ভেরিয়েবলগুলির উদ্দেশ্যটিকে পরিষ্কার করে বনাম করে তোলে each প্রতিটি ভেরিয়েবল কী তা পরিষ্কার না থাকলে আপনার কোডটি পুনরায় লিখতে হবে;
  • this.আপনি যদি পুরো দিনটি আইডিইতে বনাম কাটাতে থাকেন তবে তা অপ্রয়োজনীয় I আমি কোড পর্যালোচনা সম্পাদন করি এবং কোনও বাক্য বিন্যাস না করে তুলনামূলক ব্যবহার করে বিভিন্ন সংস্করণে আলাদা করে ফেলি;
  • টাইপ না this.লাভ আমাকে উৎপাদনশীলতা গুরুত্বপূর্ণ মিলিসেকেন্ড বনাম আমি এ কী দ্বারা payed পেতে চাপ যোগ this.একটি বেতন বাড়াতে মত হল: ডি;
  • ইত্যাদি

তবে মূল কথাটি হ'ল দিনের শেষে, এটি এখনও ব্যক্তিগত পছন্দ এবং কাজের পরিবেশে পুনরায় শুরু হয়


5

সাধারণত যোগ এই অপ্রয়োজনীয়। আমি মনে করি না এটা SE প্রতি খারাপ অভ্যাস না, কিন্তু অত্যধিক ব্যবহার এই সম্ভবত যে আমি দেখা করেছি সবচেয়ে জাভা কোড ঘাঁটি অস্বাভাবিক বিবেচিত হবে।

তবে আমি এটি কয়েকটি নির্দিষ্ট পরিস্থিতিতে মূল্যবান বলে মনে করি:

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

class MyObject {
  int value;

  public MyObject(int value) {
    this.value=value;
  }
}

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

class MyObject {
  int value;
  ....

  public MyObject add(MyObject other) {
    return new MyObject( this.value + other.value )
  }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.