যদি কোনও ফাংশনটি কল করা ভাল তবে সেই মুহুর্তে কোনও প্রভাব নেই, যদি এটি কোডের স্বচ্ছতার উন্নতি করে?


60

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

আমি করতে পারি

[view1 setAlpha:0.0f];
[view2 setAlpha:0.0f];

দুটি দর্শনের জন্য, তবে এখন তৃতীয় একটি (অ্যাপ্লিকেশন শুরুতে দৃশ্যমান হওয়া উচিত) সম্বোধন করা হয়নি। আমি একটি

[view3 setAlpha:1.0f];

প্রথম দুটি পরে, কারণ আমি মনে করি এটি এটি পরিষ্কার করে রাখে যে কোডটি দেখার সময় দু'জনের মধ্যে নয় এমন দুটি ভাবছেন in অন্যান্য প্রোগ্রামাররা কীভাবে এটি করে? এটি কি নিখুঁতভাবে পছন্দ বা কিছু সম্মেলন আছে?

যদি কলটি খুব ভারী হয় তবে তা যখন প্রয়োজন হয় না তখন এটি কল না করা স্পষ্টতই ভাল, তবে আমি আমার উদাহরণের মতো ছোট জিনিস নিয়ে ভাবছিলাম।

উত্তর:


134

আপনার কাছে একজন আক্রমণকারী রয়েছে:

শুধুমাত্র একটি একক দর্শন (3 এর মধ্যে) সর্বদা সক্রিয় (এবং দৃশ্যমান)।

তারপরে, আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি সমস্ত দর্শনগুলির ক্রিয়াকলাপ এবং দৃশ্যমানতা একবারে স্যুইচ করতে একটি ফাংশন সরবরাহ করুন:

[setActiveView viewID:2]

এই ফাংশনটি করবে:

  • অপ্রয়োজনীয় কাজ এড়িয়ে ভিউ ইতিমধ্যে সক্রিয় কিনা তা পরীক্ষা করুন
  • সক্রিয় এবং দৃশ্যমান হিসাবে ভিউ সেট করুন
  • নিষ্ক্রিয় এবং অদৃশ্য হিসাবে অন্য 2 টি মতামত সেট করুন

এটিতে একটি কাঁচা কল সম্পর্কে একাধিক সুবিধা রয়েছে setVisibility:

  • বন্ধুত্বপূর্ণ: অযথা এটি কল করা কোনও পারফরম্যান্স সমস্যা তৈরি করে না
  • ডিফেন্সিভ: এর একক পরামিতি বটচকে আরও শক্ত, তবে setVisibilityএটির জন্য এটি মনে রাখা আরও কঠিন যে মানগুলির পরিসীমা 0.0f - 1.0fএবং কেবল একটিতে সেট করা আবশ্যক1.0f
  • স্থিতিস্থাপক: পরের লোকটি দুর্ঘটনাক্রমে একটি মতামত ভুলতে পারে না
  • অভিযোজ্য: কোনও ভিউ যুক্ত করা / অপসারণের জন্য স্যুইচগুলি কোথায় রয়েছে তা সন্ধান করার জন্য সমস্ত অ্যাপ্লিকেশন কোড যাচাইকরণের প্রয়োজন হয় না, একটি একক ফাংশন (এটি) আপডেট করা দরকার

আদর্শভাবে, আক্রমণকারীটি কার্যকর করতে সহায়তা করার জন্য, অন্য কোনও ফাংশন এই সেটিংয়ের সাথে বিশৃঙ্খলা সৃষ্টি করতে সক্ষম হবে না ...


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

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

23
"আক্রমণকারীদের সংরক্ষণ করা সহজ করুন" এটি একটি সাধারণ নিয়ম মনে রাখার মতো।
গুড্ডর

1
@ টনি: আমি জানি না যে কোনও বৈশ্বিক চলকের ব্যবহারকে উত্সাহিত করা "এটি সঠিকভাবে করা" হচ্ছে কিনা তবে আপনি যদি ঠিক আগে জানতেন যে কোনটি আগে সক্রিয় ছিল, আপনার কেবল দুটি মতামত আপডেট করা দরকার। আর একটি সমাধান হ'ল প্রতিটি দৃশ্যের দৃশ্যমানতা স্মরণ করা এবং setVisibilityযদি দৃশ্যমানতাটি ইতিমধ্যে অনুরোধ করা হয়, যা দায়িত্বটিকে সরিয়ে দেয় তবে কিছু না করার জন্য ।
ম্যাথিউ মিঃ

1
@MatthieuM। আমি তাড়াহুড়োয় লিখেছি, তবে আসলে আমি যা বোঝাতে চেয়েছিলাম তা হ'ল। আপনি যদি পূর্বের অবস্থাটি জানেন তবে আপনাকে কেবলমাত্র সর্বাধিক 2 টি ভিউ আপডেট করতে হবে। কীভাবে সেই রাষ্ট্রটি মনে রাখা যায় তা অন্য বিষয় ;-)। দায়িত্বটি সরিয়ে নেওয়ার ক্ষেত্রে: দর্শন-শ্রেণীর যদি এটি সরবরাহ না করে তবে আপনাকে কেবল সেই সম্পত্তি যুক্ত করতে ক্লাসটি অন্য কোনও বস্তুতে আবৃত করতে হবে। এটি একটি পরিষ্কার সমাধান, তবে সম্ভবত কিছুটা ওভারকিল।
টনি

12

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

setViewVisibilities(0.0f, 0.0f, 1.0f)

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

যে ক্ষেত্রে view3এটির দৃশ্যমানতা পরিবর্তন করার প্রয়োজন নেই, সেখানে আপনি কিছু আচরণ যুক্ত করতে পারেন যেখানে বিশেষ মান যেমন -1.0বা nilএই লাইনগুলির পাশ দিয়ে যাওয়ার অর্থ "" দৃশ্যটির দৃশ্যমানতাকে একেবারেই পরিবর্তন করবেন না "means এটি অযৌক্তিকভাবে দৃশ্যমানতা সেট করার সমস্যাটি পেতে পারে।


9
যদি ওপি 10+ ভিউ পর্যন্ত উঠে যায় তবে প্রতি প্যারামিটার-ভিউ বজায় রাখা অসম্ভব হয়ে উঠছে। সংকলন-সময় ত্রুটিগুলি সম্পর্কে আপনার বক্তব্যটি সঠিক, তবে দুর্ভাগ্যক্রমে এটি একটি অত্যন্ত উদ্বেগজনক সমাধান।
ক্রিস সাইরাফাইস

3
@ ক্রিসক্রাইফাইস: ভিউয়ের সংখ্যা বাড়লে আপনি কিছু ধরণের "ভিউস্টেট" অবজেক্ট / শ্রেণি তৈরি করতে পারেন, যা এই আক্রমণকারীটিকে কার্যকর করে। তারপরে এটিকে বদলানোর জন্য ব্যবহার করুন ইত্যাদি অনেকগুলি দর্শন সহ, কোনও ধরণের ম্যানেজার অবজেক্ট সম্ভবত যেভাবেই বোধগম্য হয়।
sleske

8

আমি বিশ্বাস করব যে কলটি অনিবদ্ধ (এবং কেন) সেরা তা ব্যাখ্যা করে একটি মন্তব্য যুক্ত করা।

(সম্ভবত, কোনও কল বিনা চাপানো হয়েছে বা এটি সম্পর্কে আপনার কোনও মন্তব্য প্রয়োজন, এটি একটি কোড গন্ধ হতে পারে)


1
@ নিলল যদি সম্ভব হয় তবে একটি মন্তব্য একটি মন্তব্যের চেয়ে আরও ভাল।
200_সাক্সেস

9
মন্তব্যগুলি
অভাবনীয়

2
@ কেভিন বা আপনি এমন কোড লিখতে পারেন যা কোনও মন্তব্য ছাড়াই নিখুঁতভাবে পঠনযোগ্য।
জানুয়ারি

1
@ জান মন্তব্যগুলি কী কোডটি দেয় তা কেবল ব্যাখ্যা করার চেয়ে বেশি .......
কেভিন

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

4

এই বিশেষ ক্ষেত্রে, @ ম্যাটিউ এম। এর সঠিক সমাধান রয়েছে।

আরও সাধারণ ক্ষেত্রে, যেখানে কোনও অনুরূপ রূপান্তর নেই, আপনাকে নিজেকে জিজ্ঞাসা করতে হবে: কোনও ভবিষ্যত প্রোগ্রামার এটি বিচলিত হওয়ার কোনও সম্ভাবনা আছে কি ?

উত্তরটি সাধারণত হ্যাঁ হয়। যার অর্থ হ্যাঁ, আপনার কলটি যুক্ত করা উচিত। ফ্রেমের কাঠামোর কিছু ভবিষ্যতের সংস্করণ অনের পরিবর্তে সমস্ত দর্শন দিয়ে শুরু হবে।

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