ভাল শো () + লুকান () বা সেটভিজিবল (বুল দৃশ্যমান)?


59

এর চেয়ে ভাল আর কেন? (ইন্টারফেস-ডিজাইনের দিক থেকে):

ক) দুটি Show()এবং Hide()কাজ আছে

খ) একটি SetVisible(bool visible)ফাংশন আছে

সম্পাদনা: উদাহরণস্বরূপ কিছু বস্তুর দৃশ্যমান অবস্থা রয়েছে এবং এটি পরিবর্তন করতে এই ফাংশনগুলি ব্যবহৃত হয়।

গ) তিনটি লাভ করার জন্য Show(), Hide(), SetVisible(bool visible)ফাংশন


4
কোন প্রসঙ্গে? সাধারণত এটি কিছু যায় আসে না
আভিভ কোহন


6
তাদের সব প্রকাশ্য হয় না কেন? এমন কিছু ক্ষেত্রে রয়েছে যেখানে আপনি জানেন যে সেগুলি সর্বদা প্রদর্শিত বা লুকানো থাকবে এবং এমন কিছু ক্ষেত্রে রয়েছে যেখানে আপনি শর্তযুক্ত বা লুকিয়ে রাখতে চাইবেন।
প্লিজি

@ প্ল্লি: সম্ভবত এটি খুব ভাল বিষয়।
ব্যবহারকারীর 12123061

4
জাভাতে, এটি সেট করা হবে দৃশ্যমান, লুকানো এবং শুরুর বড় অক্ষর ছাড়াই প্রদর্শন করা।
পিয়ের আরলাড

উত্তর:


81

আমি পছন্দ করি SetVisible(bool visible), কারণ এটি আমাকে ক্লায়েন্ট কোডটি লিখতে দেয়:

SetVisible(DetermineIfItShouldBeVisible());

পরিবর্তে লিখতে হবে

if (DetermineIfItShouldBeVisible()) {
    Show();
} else {
    Hide();
}

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

void ButtonWithALabel::SetVisible(bool visible) {
    myButton.SetVisible(visible);
    myLabel.SetVisible(visible);
}

25
সমানভাবে, আপনি ভিজ্যুয়ালকেও একটি সম্পত্তি হিসাবে ধরে রাখতে পারেন, ধরে নিলেন আপনার ভাষা এটি সমর্থন করে। MyObject.Visible = false;আমাকে তার চেয়ে আরও স্বজ্ঞাত হিসাবে MyObject.SetVisible(false);
ব্রায়ান

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

10
SetVisible()(আমার কাছে) পরামর্শ দেয় না যে আপনি আসলে কিছু প্রদর্শন করছেন। এটি আরও পড়ছে যেমন আপনি কোনও বস্তুর দৃশ্যমান সম্পত্তি সেট করছেন, সম্ভবত এটি কোনও সম্পর্কিত Refresh()বা Redisplay()পদ্ধতিতে রেখে সম্পত্তিটির মূল্য পরীক্ষা করার জন্য এই বস্তুর প্রদর্শিত বা লুকানো উচিত কিনা তা নির্ধারণ করতে।
টিএমএন

1
দুর্ভাগ্যক্রমে জাভা সি # ডোনের মতো বৈশিষ্ট্যগুলিকে সমর্থন করে না, কেবল উপরে এবং উপরে প্রদর্শিত গেটার এবং সেটটারগুলি।
দ্যগ্রিনকাবেজ

1
@ টিএমএন: আমি প্রত্যাশা করব যে দৃশ্যমানতা রোধকারী অন্যান্য কারণের অভাবে (জেড অর্ডার, প্যারেন্ট দৃশ্যমানতা, অবস্থান ইত্যাদি) setVisible(true)একটি প্রক্রিয়া চালু করবে যেখানে সিস্টেমটি যখন অলস অবস্থায় থাকবে তখন বস্তুটি আঁকবে, যদি আগে না থাকে। আমি প্রত্যাশা করব যে refreshএটি অবজেক্টের প্রদর্শনটি ত্বরান্বিত করতে কার্যকর হতে পারে তবে অবজেক্টটি শেষ পর্যন্ত নির্বিশেষে আঁকতে পারে (যদি না এর দৃশ্যমানতাটি falseঘটে যাওয়ার আগে সেট করা না থাকে )।
সুপারক্যাট

35

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

যে ভাষাগুলিতে বৈশিষ্ট্যগুলি সমর্থন করে সেগুলিতে এগুলি পছন্দ করা উচিত তবে যেহেতু জাভা বা সি ++ কেউই করেন না, আমি অনুমান করি এটি একটি মূল বিষয়।

আমি মনে করি setVisible()এই কারণগুলির জন্য পছন্দ করা উচিত:

  1. বিপরীত কার্য কী তা অবিলম্বে সুস্পষ্ট। বিপরীতে setVisible(false)আপনি কল করতে পারেন setVisible(true)যেখানে বিপরীতে hide()সহজেই হতে পারে reveal()
  2. এটি প্রোগ্রামিমেজিকভাবে সহজ যখনই আপনি নির্ধারণ করছেন যে কোন রাজ্যে কোডটি নেওয়া উচিত, অর্থাত্ আপনি setVisible(wantToSee)কোনও ifবিবৃতি ব্যবহার না করে কল করতে পারেন ।
  3. একবার আপনার যদি একাধিক অনুরূপ ফাংশন হয়ে যায় তবে setX()ফর্ম্যাট জেনারালাইজস হয় যাতে আপনার সামঞ্জস্যপূর্ণ ফাংশনগুলির একটি সেট থাকতে পারে তবে ভার্বড পদ্ধতির মাধ্যমে অনেকগুলি ফাংশন তৈরি হয় যা আপনি কী সন্ধান করছেন তা যদি জানেন না তবে এটি সনাক্ত করা কঠিন হতে পারে। এপিআইগুলিতে ধারাবাহিকতা এগুলি শেখার এবং মনে রাখার পক্ষে যথেষ্ট সহজ করে তোলে।

3
সি ++ এর কোনও বৈশিষ্ট্য নেই তবে এতে ফাংশন রয়েছে, সুতরাং আপনি নতুন সদস্য ফাংশন যুক্ত না করে ক্লাস ইন্টারফেসটি প্রসারিত করতে পারবেন, অর্থাত্ কম সংযুক্তির সাথে।
ফ্রেসনেল

কিউটি প্রায়শই তিনটিকেই সুবিধার্থে সরবরাহ করে যাতে লুকান () এবং শো () সিগন্যাল / স্লট সিস্টেম ব্যবহার করে অন্যান্য ইভেন্টের সাথে সরাসরি সংযুক্ত হতে পারে। এটি আসলে স্লট সিস্টেমের একটি সীমাবদ্ধতা - যদিও এটি বুস্ট :: ফাংশনগুলির মতো আরও কিছু ব্যবহার করা হত, সত্য / মিথ্যা যুক্তি কলব্যাক সেটআপ করার পর্যায়ে আবদ্ধ হতে পারে।

1
"যে ভাষাগুলিতে বৈশিষ্ট্যগুলি সমর্থন করে, সেগুলিতে অগ্রাধিকার দেওয়া উচিত তবে যেহেতু জাভা বা সি ++ কেউই করেন না, আমি অনুমান করি এটি একটি মূল বিষয়" " অগত্যা। গেটার্স / সেটটারদের অগ্রাধিকারে? হ্যাঁ. তবে সেট_ভিজিবল আসলে সেটার নয়।
মাইলস রাউটিং

19

এটি প্রেক্ষাপটে দেখানো এবং লুকানোর অর্থ কী তার উপর নির্ভর করে depends প্রথমে আপনি কোনটি আপনার "প্রধান উপায়" তা আবিষ্কার করতে চান এবং এটি বিকাশের দিকে মনোনিবেশ করুন:

  • বাছাই করার কারণ setVisible(bool)
    • এটি কেবল একটি সরল বিট-ফ্লিপ, বা আপনার অবজেক্টটি মূলত স্থিতিস্থাপক
    • আপনার অবজেক্ট তার বেশিরভাগ সময় CRUD ফ্রেমওয়ার্কে ব্যয় করতে চলেছে
    • দেখানো এবং লুকানোর মধ্যে অনেকগুলি সহজেই ভাগ করা কোড রয়েছে
  • বাছাই করার কারণ show()এবংhide()
    • যেমন যখন বস্তুর জন্য তার পাত্রে সব চেক করতে হয়েছে একটি গুরুত্বপূর্ণ পার্শ্ব প্রতিক্রিয়া বা যুক্তিবিজ্ঞান প্রচুর চালানো হচ্ছে, আছে তাদের দৃশ্যমানতা রাষ্ট্র, অথবা একটি রূপান্তরটি অ্যানিমেশন আরম্ভ করে।
    • এটি কী এমন কোনও ডোমেন মডেলের অংশ যেখানে অভিপ্রায়টি প্রকাশ করা গুরুত্বপূর্ণ

ঠিক আছে, সুতরাং এখন আপনি এটির "সোনার স্ট্যান্ডার্ড" মূলটি কোড করে রেখেছেন, আপনার অবজেক্টটি যার যার জীবনযাপন করতে চলেছে তার পক্ষে জীবন সহজ করার জন্য এটি অন্য স্টাইলে পাতলা সুবিধা-পদ্ধতি যুক্ত করা উপযুক্ত কিনা তা আপনাকে খুঁজে বের করতে হবে।

  • সুবিধে setVisible(bool)
    • আপনাকে যদি বিবৃতি এড়াতে দেয় যা তুচ্ছ শর্তাদি করে এবং কেবলমাত্র দৃশ্যমানতাকে প্রভাবিত করে (প্রাক্তন setVisible(a==b))
    • নির্দিষ্ট গিটার / সেটার ফ্রেমওয়ার্কগুলিতে তারযুক্ত হতে পারে, যদি এমন কিছু হয় যা আপনি আশা করেন
  • সুবিধা show()এবংhide()
    • ফার্স্ট-ক্লাস ফাংশন এবং কলব্যাকস সহ একটি ভাষায় কার্যকর (প্রাক্তন onSuccess(widget.show))
    • স্ট্যাক-ট্রেস এবং পারফরম্যান্স প্রোফাইলিং সহ পড়া খুব সহজ, যেহেতু আপনি প্রোগ্রামটি কী করার চেষ্টা করছে তা আপনি দ্রুত দেখতে পারেন

টিএলডিআর: কোনটি সবচেয়ে গুরুত্বপূর্ণ তা খুঁজে বের করুন, এটি বাস্তবায়ন করুন এবং তারপরে নিজেকে জিজ্ঞাসা করুন যে এটি অন্য স্টাইলকে পাতলা সুবিধার্থে যুক্ত করার মতো কিনা।


11

আমি "তিনটি" বলতে হবে।

Show()এবং Hide()তুলনায় grok করা আরো সহজ হতে থাকে SetVisible(true)এবং SetVisible(false)। যাইহোক, আপনি যখন যুক্তিসঙ্গতভাবে দৃশ্যমানতা সেট করতে চান তবে boolতার ifচারপাশে একটি নির্মাণের পরিবর্তে কোনও পদ্ধতি গ্রহণ করা ভাল bool

যুক্তি এবং ন্যূনতম বয়লারপ্লেটের সদৃশ ছাড়াই আপনি তিনটিই সমর্থন করতে পারেন:

void Show() {
    foo.Show();
    bar.Show();
}

void Hide() {
    foo.Hide();
    bar.Hide();
}

void SetVisible(bool visible) {
    if (visible) {
        Show();
    } else {
        Hide();
    }
}

বিকল্পভাবে, আপনি মোড়ানো জিনিসগুলির যদি আরও একটি SetVisibleআইশআইপি থাকে:

void Show() {
    SetVisible(true);
}

void Hide() {
    SetVisible(false);
}

void SetVisible(bool visible) {
    foo.SetVisible(visible);
    bar.SetVisible(visible);
}

40
মাইক্রোসফ্ট শুরু এবং বন্ধ করার জন্য এই পদ্ধতির ব্যবহার করে System.Windows.Forms.Timer। ব্যক্তিগতভাবে, আমি এটি বিভ্রান্তিকর বলে মনে করি। যখন আমি উভয়ই দেখি Showএবং SetVisible, আমার প্রথম প্রবণতাটি হ'ল দুটি ফাংশনের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য আছে কিনা তা অবাক করে।
ব্রায়ান

1
যদিও এই বিভ্রান্তি দূর করতে আপনি সহজেই তাদের ডকুমেন্ট করতে পারেন। আমি যেমন এটি একটি সহজ উদাহরণ ছিল না।
গ্যারি শাটলার

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

5
এটি ইন্টারফেস বিভাজন নীতি, SOLID নীতিগুলির মধ্যে একটির স্পষ্ট লঙ্ঘন। আপনার দৃষ্টিভঙ্গির বিপরীতে অন্য মতামত জারোস্লাভ তুলাক, নেটবিনের ডিজাইনার, যা তাঁর বই ব্যবহারিক এপিআই নকশায় একটি এপিআইয়ের মধ্যে একটি জিনিস করার একমাত্র উপায় সরবরাহ করার জন্য অনেক সময় জোর দিয়েছিল।
আলফ্রেডো ক্যাসাডো

@ আলফ্রেডো ক্যাসাডো আমি সম্মত। সেটভিজিবল যদিও সুরক্ষিত থাকলে কী হবে ? আপনি এটি একটি সাবক্লাস থেকে অ্যাক্সেস করতে পারেন, তবে এই ইন্টারফেসের সাথে একটি প্রদত্ত সত্তাকে কল করুন (যেমন একটি এপিআই) হাইড / শো হতে হবে।
পিয়ের আরলাড

5

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

আমার জন্য আরেকটি গুরুত্বপূর্ণ যুক্তি হ'ল পাঠযোগ্যতা, আমার মতে ভাল কোডটি গদ্যের মতো পড়তে পারে, এটির সত্যই অদ্ভুত গদ্য "মাইন_ উইন্ডো সেটভিজিবল মিথ্যা" এর মতো "মেইন উইন্ডো আড়াল" এর পরিবর্তে আপনি লিখেন বা সাধারণভাবে কথা বলেন? কেন এই অদ্ভুত ব্যবহার করবেন? সফ্টওয়্যার প্রোগ্রামগুলিতে ভাষা নির্মাণের সময় আরও বেশি প্রাকৃতিক ভাষা ব্যবহার করা সম্ভব ?.


1
এসেম্ব্লার গদ্য কি যথেষ্ট নয়?
আলেকজান্ডার

আমি আশা করব যে ক্রমটি it.setVisible(false); it.setVisible(true);কোনও নিয়ন্ত্রণের পিতামাতার দৃশ্যমানাকে প্রভাবিত করবে না এবং এটি নিয়ন্ত্রণের জেড অর্ডার বা অবস্থানকে প্রভাবিত করবে না। বিপরীতে hide(); show(),; নিয়ন্ত্রণের পিতামাতাকে দৃশ্যমান হতে, অন্য নিয়ন্ত্রণের ওপরে স্থানান্তরিত করতে এবং এর অবস্থানটি এমন কোনও জায়গায় সীমাবদ্ধ রাখতে পারে যা বেশ দৃ pla়তার সাথে নিয়ন্ত্রণের পিতামাতাকে দৃশ্যমান হতে বাধ্য করে could কিছু কিছু ক্ষেত্রে, এটা নিশ্চিত কিছু (আসলে দৃশ্যমান উপরোক্ত মত উপার্জন একটি উপায় আছে দরকারী show(), কিন্তু অন্যান্য ক্ষেত্রে এটা দৃশ্যমানতা পতাকা পরিবর্তন করতে দরকারী ছাড়া । অন্য কিছু পরিবর্তন
supercat

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

5

আমি বিশ্বাস করি যে পদ্ধতিটি যত বেশি প্রকাশযোগ্য, তত বেশি পাঠযোগ্য এবং ফলস্বরূপ, কোডটি বজায় রাখতে সক্ষম হবে। নিম্নলিখিত দুটি ক্ষেত্রে বিবেচনা করুন:

মামলা 1:

void showCustomerData(customerId){
  Customer customer = getCustomer(CustomerId);
  customerPanel.setVisible(customer.isCustomerEnabled());
}

কেস 2:

void showCustomerData(customerId){
  Customer customer = getCustomer(CustomerId);
  //always show customer panel
  customerPanel.setVisible(true);
}

"কেসভিজিবল" ফাংশনটি কী করছে তা প্রথম ক্ষেত্রে এটি পরিষ্কার, তবে আপনি যদি এটি পড়তে চান তবে আপনি বলবেন:

গ্রাহক সক্ষম থাকলে গ্রাহক প্যানেলটি দৃশ্যমান করতে সেট করুন বা গ্রাহক অক্ষম থাকলে এটি লুকানোতে সেট করুন।

যদিও এটি আরও বর্ণনামূলক:

  • গ্রাহকের অবস্থা পরীক্ষা করুন:
    • যদি গ্রাহক সক্ষম থাকে তবে গ্রাহকের প্যানেলটি প্রদর্শন করুন
    • অন্যথায়, এটি লুকান

যা "কেস 1" ফাংশনটিকে নিম্নলিখিতগুলিতে পরিবর্তন করবে:

void showCustomerData(customerId){
  Customer customer = getCustomer(CustomerId);
  if(customer.isCustomerEnabled()){
    customerPanel.Show();
  }
  else{
    customerPanel.Hide();
  }
}

এটি আরও কোড উত্পাদন করে, তবে আরও পঠনযোগ্য।

দ্বিতীয় কেসটিতে একটি সুস্পষ্ট ত্রুটি রয়েছে, এটি হ'ল আপনি ইতিমধ্যে জানেন যে আপনি প্যানেলটি দেখাতে চান, তবে "শো" ফাংশনটি ব্যবহার করবেন না কেন?

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


আমি বলতে হবে: show customer panel iff the user/customer is enabled। আমি সম্মত হই যে আরও জটিল পরিস্থিতি প্রচুর থাকতে পারে আপনার উদাহরণ যেমন পড়া সহজ নয় তবে যাইহোক, এই ক্ষেত্রে আমি এই শর্তগুলিকে বিভিন্ন লাইনে বিভক্ত করব।
কমফ্রিচ

5

আমি বিশ্বাস করি যে Hide()/ Show()বিকল্পটি আকর্ষণীয় কারণ কারণ এর চেয়ে বেশি কী চলছে তা বোঝা সহজ SetVisible(true), যখন একটি একক ক্রিয়াকলাপ করাই বেশি পছন্দনীয় কারণ এটি প্রচুর শর্ত থেকে বিরত থাকে।

আমি ইনপুট হিসাবে একটি শুমার ব্যবহার করার সুপারিশ যদি সেই ক্ষেত্রে তারপর SetVisible, তাই আপনি হয় পেতে SetVisible(Visibility.Visible)বা SetVisible(Visibility.Hidden)। আপনার একটি একক ফাংশন রয়েছে আপনি কী পদক্ষেপ নেওয়া হচ্ছে তা তাত্ক্ষণিকভাবে পড়তে পারেন।

জাভা নামকরণের কনভেনশনগুলি ব্যবহার করে, আপনি হয়ত setVisible(Visibility.VISIBLE)বা হতে পারেন setVisible(Visibility.HIDDEN)


3

আমি ডারিনের উত্তরের সাথে একমত, তবে একটি সি # প্রোগ্রামার দৃষ্টিকোণ থেকে একটি দৃষ্টিকোণ যুক্ত করতে চেয়েছি।

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

আপনি জাভা এবং সি ++ তে এটি প্রত্যাশা করেন কিনা তা আমি জানি না, তবে সি # তে আমি যা প্রত্যাশা করছিলাম, যদিও এটি # সম্পত্তি হিসাবে পরিচিত, এটির জন্য একটি সংক্ষিপ্ত হাত রয়েছে। এবং কীভাবে বৈশিষ্ট্যগুলি ব্যবহার করবেন সে সম্পর্কে কিছু সুন্দর দিকনির্দেশনা এখানে রয়েছে ( http://msdn.microsoft.com/en-us/library/ms182181.aspx )।

এই দৃষ্টিভঙ্গি দেওয়া হয়েছে, তারপরে আমি যে ইন্টারফেসটি বেছে নিয়েছি তা যদি কোনও পার্শ্ব প্রতিক্রিয়া থাকে তবে তার উপর নির্ভর করে (ক্ষেত্রের মান পরিবর্তন করা ছাড়া):

যদি ক্রিয়াটি সম্পাদন করার পার্শ্ব প্রতিক্রিয়া থাকে, উদাহরণস্বরূপ এটি একটি ডায়ালগ বক্স দেখাচ্ছে তবে আমি "শো ()" এবং "লুকান ()" নিয়ে যাব।

যদি এর পার্শ্ব প্রতিক্রিয়া না থাকে তবে বলুন যে আমি একটি "উইজেটের" দৃশ্যমানতা সেট করছি এবং অন্য কিছু যা তার অবস্থার উপর নির্ভর করে সেই উইজেটকে রেন্ডার করে তবে আমি সেটভিজিবিলিটি বা সেটআইভিজিবল ব্যবহার করব। (আমি এটিকে সেটভিজিবল বলব না)।

সি # তে (জাভা সম্পর্কে নিশ্চিত নয়) একটি পর্যবেক্ষক প্যাটার্ন গ্রহণ করা খুব সাধারণ বিষয়, যেখানে কোনও ইউআই কাঠামো বস্তুগুলিতে পরিবর্তনের জন্য শুনবে এবং দৃশ্যমানতার মতো কোনও সম্পত্তি পরিবর্তিত হলে স্বয়ংক্রিয়ভাবে ইউআই-কে পুনরায় রেন্ডার করবে। তার মানে এই যে সেট সেট করে ভিজ্যুবলিকে কল করে মান নির্ধারণ করা এরূপ পার্শ্ব প্রতিক্রিয়া হিসাবে দেখা দেয় তবে আমার সংজ্ঞায় এটি হয় না। "ইসভিজিবল" প্রতিনিধিত্ব করে ক্ষেত্রের মান সেট করে উইজেটের চুক্তিটি সম্পন্ন হয়।

অন্যভাবে রাখুন, ফর্মটি দেখানোর আগে কোনও ফর্মের উপর একটি লেবেলের দৃশ্যমানতা টগল করা আমার পক্ষে ঠিক। উদাহরণস্বরূপ, লেবেল.জেটসভিজিবল == সত্য, তবে ফর্মটি প্রদর্শিত হয়নি।

ফর্মটি যখন দেখানো হচ্ছে না তখন আমার কাছে হাইড () কল করা ঠিক হবে না।


1
তোমার বর্ণনা getXXX()এবং setXXX()পার্শ্ব প্রতিক্রিয়া ছাড়াই একটি ক্ষেত্র অ্যাক্সেস করার উপায় হচ্ছে পদ্ধতি মত জাভা এবং শোনাচ্ছে না C # এর। জাভাতে এটি আপনাকে অবশ্যই এইভাবে করা উচিত কারণ এর কোনও বৈশিষ্ট্য নেই। আমি যদি সি # তে এর মতো কোডটি দেখে থাকি তবে আমি অনুমান করব যে এটি কোনও জাভা বিকাশকারী লিখেছেন যিনি এখনও সি # তে থাকা বৈশিষ্ট্য সম্পর্কে জানতে পারেন নি।
gille3

জন্য +1 SetVisibility
aktartar

@ গিলি 3 - হ্যাঁ অবশ্যই এবং, সিএলআরতে "সম্পত্তি" বিদ্যমান নেই, সি # আইলিতে get_XXX এবং সেট_ওয়াইওয়াই পদ্ধতিতে কলগুলিতে অনুবাদ করে। আমার বক্তব্যটি হ'ল: প্রশ্নের প্রসঙ্গে আপনি যদি সেট এক্সএক্সএক্সএক্স, জাভাতে এক্স এক্স এক্স দেখেন তবে আপনি এটি সি # এর বৈশিষ্ট্যগুলির মতো একই শব্দার্থবিজ্ঞানের সাথে কাজ করার আশা করতে পারেন। এটি সত্য, তবে আমি যুক্তিযুক্ত যে সি # তে থাকা বৈশিষ্ট্যের জন্য একই নির্দেশিকাগুলি জাভাতে সেটএক্সএক্সএক্সএক্স এবং গেট এক্সএক্সএক্সএক্স এর ক্ষেত্রে প্রযোজ্য। আমি পোস্টে আমি যে নির্দেশিকাগুলি উল্লেখ করছি তাতে সম্মত হলাম এবং ইন্টারফেসটি সংজ্ঞায়িত করার সময় আমি জাভাতে এই দৃশ্যে ব্যবহারের জন্য একই নির্দেশিকাগুলির পক্ষে পরামর্শ দিচ্ছি।
ড্যানিয়েল জেমস ব্রায়ার্স

1
এটি স্পষ্ট করতে সহায়তা করতে পারে যে আপনি যখন "পার্শ্ব-প্রতিক্রিয়া" বলতে চান, তখন আপনার অর্থ "'পর্যবেক্ষণযোগ্য' জিনিস হওয়ার সাথে যুক্ত ব্যক্তিদের ছাড়াও" mean আমি যে নিয়মকে পছন্দ করি তা হ'ল এটি যদি বলা যায় যে যদি getXXকলটির কোনও অনুরূপ setXXপদ্ধতি থাকে setYYতবে তা এটির প্রভাব ফেলবে না তবে এটি কোনও getZZকলকে প্রভাবিত করতে পারে যার কোনও setZZপদ্ধতি নেই।
সুপারক্যাট

2

আমি কিছুটা পরিবর্তিত ইন্টারফেসের পরামর্শ দেব:

Show();
Hide();
ToggleVisible();
ToggleVisible(bool visible);

আরও ভাল নাম

এই পদ্ধতির নামগুলি বিকাশকারীকে কী পদ্ধতিটি করা দরকার তার ভিত্তিতে কোন পদ্ধতিটি ব্যবহার করতে হবে তা সিদ্ধান্ত নিতে সহায়তা করে। যেখানে SetVisible(bool visible)একজন বিকাশকারী গুলান না কারণ এটি হিসাবে একই শব্দার্থিক অর্থ conveys Show()এবং Hide(), Toggle()একটি শর্ত এই ক্রিয়াটি নির্ধারণ অস্তিত্ব বোঝা। এটি প্রতিটি পদ্ধতি ব্যবহার করার সময় এটি বিকাশকারীর কাছে স্বজ্ঞাত হয়ে ওঠে।

হ্রাসকৃত কোড রিডানডেন্সি

আপনার ইন্টারফেসে একাধিক পদ্ধতি থাকার সুবিধা হ'ল এটি কলিং কোডটিকে সহজতর করে। আপনি কেবল প্রকাশ করতে পারেন Show()এবং Hide(), কিন্তু:

  • আপনি সম্ভবত কিছু প্রয়োজন, চাই SetVisible()লোকচক্ষুর অন্তরালে বাস্তব কাজ করতে বেসরকারী পদ্ধতি (বা অপ্রয়োজনীয় কোড লিখতে Show()এবং Hide())।
  • কলিং কোডটিতে অনেকগুলি অতিরিক্ত কাজ হতে পারে যদি / অন্য কোনও ব্লক কেবল কোন পদ্ধতিটি ব্যবহার করতে হয় তা চয়ন করে। এটি আমার মতে কোডটি ব্লাট করে।
  • আমি যদি ভোক্তা হয়ে থাকি তবে আমি সম্ভবত আমার নিজের মোড়ক ফাংশনটি লিখতাম যা কোড ফোলা এড়াতে (আমি রিডানড্যান্ট কোডকে ঘৃণা করি) এর জন্য ইতিমধ্যে যা করে SetVisible()(বা Toggle()) তা করে। সুতরাং সম্ভবত ইতিমধ্যে বাস্তবায়নের একটি ব্যক্তিগত পদ্ধতি হিসাবে বিদ্যমান একটি পদ্ধতি সদৃশ ।

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

0

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

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

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