জাভাতে C # 'var' কীওয়ার্ডের সমতুল্য কী?


264

একটি ব্যবহার Var C # শব্দ অন্তর্নিহিত টাইপ ঘোষণা করা হয়। জাভা সমতুল্য সিনট্যাক্স কি Var ?


4
val(বা var) আপনি যদি একটি নির্দিষ্ট "জাভা প্রতিস্থাপন" ভাষা ব্যবহার করেন ;-)

6
@ পিএসটি: তা কি স্কালা হবে? হুঁ, হ্যাঁ
rsenna

ইন্টেলিজের জন্য, আমি এটি একটি বৈশিষ্ট্য অনুরোধ হিসাবে জমা দিয়েছি: youtrack.jetbrains.com/issue/IDEA-102808 আইডিই অন্তর্নিহিত কোডটি না থাকলেও ভল বা ভের দেখাতে কোডটি ভেঙে দিতে পারে।
জন অনস্টট

@ জন আমি ইন্টেলিজিজের জন্য একসাথে কিছু হ্যাক করেছি, আমার উত্তর দেখুন
বালফা

3
এই বৈশিষ্ট্যটি জাভায় অন্তর্ভুক্ত করার জন্য এখন একটি প্রস্তাব রয়েছে - openjdk.java.net/jeps/286
ম্যাকগিন

উত্তর:


248

কেউ নেই. হায়, আপনাকে পুরো টাইপের নামটি টাইপ করতে হবে।

সম্পাদনা: পোস্ট হওয়ার 7 বছর পরে, varজাভা 10-এ স্থানীয় ভেরিয়েবলগুলির (সহ ) জন্য অনুকরণ টাইপ করুন ।

সম্পাদনা করুন: নীচে থেকে কিছু মন্তব্য সংগ্রহ করার জন্য পোস্ট হওয়ার 6 বছর পরে:

  • সি # এর varকীওয়ার্ড থাকার কারণ হ'ল .NET- তে কোনও প্রকারের নাম থাকতে পারে। উদাহরণ:

    var myData = new { a = 1, b = "2" };

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

  • varযেমন হয় না dynamicvarIables এখনও 100% স্থিতিযুক্ত টাইপ করা হয়। এটি সংকলন করবে না:

    var myString = "foo";
    myString = 3;
  • varপ্রকার থেকে প্রকারটি সুস্পষ্ট হলে তাও কার্যকর। উদাহরণ স্বরূপ:

    var currentUser = User.GetCurrent();

    আমি বলতে পারি যে আমি যে কোনও কোডের জন্য দায়বদ্ধ, currentUserতার মধ্যে একটি Userবা উদ্ভূত শ্রেণি রয়েছে। স্পষ্টতই, যদি আপনার বাস্তবায়নটি User.GetCurrentকোনও পূর্বাবস্থায় ফিরে আসে, তবে সম্ভবত এটি আপনার পক্ষে ক্ষতি।

  • এটির কোনও যোগসূত্র নেই var, তবে আপনার যদি অদ্ভুত উত্তরাধিকারের শ্রেণিবদ্ধতা থাকে যেখানে আপনি অন্যান্য পদ্ধতিগুলির (যেমন new public void DoAThing()) শ্যাডো পদ্ধতিগুলি ব্যবহার করেন তবে ভুলে যাবেন না যে অ-ভার্চুয়াল পদ্ধতিগুলি সেটির ধরণের দ্বারা প্রভাবিত হয়।

    আমি এমন কোনও বাস্তব বিশ্বের দৃশ্যের কল্পনা করতে পারি না যেখানে এটি ভাল ডিজাইনের সূচক, তবে এটি আপনার প্রত্যাশার মতো কার্যকর নাও হতে পারে:

    class Foo {
        public void Non() {}
        public virtual void Virt() {}
    }
    
    class Bar : Foo {
        public new void Non() {}
        public override void Virt() {}
    }
    
    class Baz {
        public static Foo GetFoo() {
            return new Bar();
        }
    }
    
    var foo = Baz.GetFoo();
    foo.Non();  // <- Foo.Non, not Bar.Non
    foo.Virt(); // <- Bar.Virt
    
    var bar = (Bar)foo;
    bar.Non();  // <- Bar.Non, not Foo.Non
    bar.Virt(); // <- Still Bar.Virt

    ইঙ্গিত হিসাবে, ভার্চুয়াল পদ্ধতিগুলি এর দ্বারা প্রভাবিত হয় না।

  • না, varপ্রকৃত পরিবর্তনশীল ব্যতীত আরম্ভ করার কোনও অ-বে cl মান উপায় নেই।

    var foo1 = "bar";        //good
    var foo2;                //bad, what type?
    var foo3 = null;         //bad, null doesn't have a type
    var foo4 = default(var); //what?
    var foo5 = (object)null; //legal, but go home, you're drunk

    এই ক্ষেত্রে, এটি কেবল পুরাতন পদ্ধতিতে করুন:

    object foo6;

11
@Mike Caron আপনি: সি # [ডিফল্ট] আছে অ ভার্চুয়াল কল এবং অপারেটরদের তাই ভার্চুয়াল নয় ... var p = new X(); p.Z()হিসাবে একই নয় SuperX p = new X(); p.Z()সব X এবং এবং SuperX জন্য, যদিও X : SuperX। সঙ্গে স্ট্যাটিক ধরনের সর্বদা উপরে প্রথম উদাহরণে, কিন্তু সবসময় দ্বিতীয় উদাহরণে। সচেতন হতে একটি সূক্ষ্ম কিন্তু গুরুত্বপূর্ণ পার্থক্য। তবে আপনার উত্তরটি খুব সঠিক :-)varpXSuperX

200
@ জন হান্না: varকোডটি কম পরিষ্কার করে না। বরং আমার মতে বিপরীত। উদাহরণস্বরূপ আপনি যখন এটি ঘোষণা করেন এবং তত্ক্ষণিত করেন তখন একই সারিতে দুটি (বা এমনকি তিনটি) টাইপ লিখুন কেন RadioButton radioButton = new RadioButton();? varআপনি যখন আপনার ভেরিয়েবলের নামকরণ করছেন তখন আপনাকে দ্বিগুণ ভাবাতে বাধ্য করে কারণ এটি প্রকারের পরিবর্তে কার্যকারিতাটির দিকে ফোকাস ঘুরিয়ে দেয় (উদাহরণস্বরূপ UserCollection collection = new userRepository.GetUsers();আরও প্রাকৃতিকভাবে পরিবর্তিত হয় var users = userRepository.GetUsers();)। আপনি যদি varঅস্পষ্ট মনে করেন তবে এটি এটির অব্যবহৃত কারণ।
মার্টিন ওধেলিয়াস

4
@ মার্টিন ওডেলিয়াস varখুব স্পষ্টভাবে কোড পরিষ্কারভাবে ব্যবহার করতে পারে তবে এটি এটিকে খুব খারাপভাবে ব্যবহার করাও অস্পষ্ট করতে পারে; অনেকগুলি ফরম্যাটিং বিকল্পের মতো। আপনি বেনামে থাকা অবজেক্ট এবং জেনেরিকগুলি কতটা ব্যবহার করেন তার উপর নির্ভর করে ভারসাম্যটি পৃথক হয়, যার কোনটি .NET 1.0 এ বিদ্যমান নেই, এটি সি এর প্রথম সংস্করণে অনুমান মূলশব্দ হিসাবে কম দরকারী করে তোলে ♯ আমি কেবল RadioButton radioButtonকোনও কারখানা বা সহায়ক পদ্ধতির ক্ষেত্রে একটি নাম বলব যেখানে বোতামটি সম্পর্কে একমাত্র তাৎপর্যপূর্ণ বিষয় ছিল এটি ছিল একটি RadioButton, অন্যথায় বা তার সাথে বা বাইরে পাগলামি var
জন হান্না

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

3
আপনি বিভ্রান্ত করছেন Var সঙ্গে বেনামী ধরনেরvarনিজেই কেবল কম্পাইলারকে অ্যাসাইনমেন্ট থেকে প্রকারটি নির্ধারণ করতে বলে; এটা সিনট্যাকটিক চিনি। আমি প্রথমে এটি সম্পর্কে সন্দেহ ছিলাম, তবে আমি এটিকে ধর্মীয়ভাবে ব্যবহার করি এবং এখনও এমন একটি সময়ের মুখোমুখি হতে পারি না যেখানে এটি বিভ্রান্তির কারণ হয়ে দাঁড়ায়। এটি তাত্ক্ষণিকতার সময় অপ্রয়োজনীয়তা সরিয়ে দেয় এবং রেফারেন্স করার সময় প্রকারটি পরীক্ষা করার প্রয়োজনটিকে সরিয়ে দেয়। কোন জাভা সমতুল্য জাভা 9. এর হিসাবে
Robear

46

আপনি আপনার প্রকল্পের Lombok যুক্ত করে থাকেন আপনি তার ব্যবহার করতে পারেন Val শব্দ।

http://projectlombok.org/features/val.html


1
@ রাইটফোল্ড: যে বিষয়গুলির রেফারেন্স রয়েছে finalসেগুলি অপরিবর্তনীয় নয়। বিবেচনা করুনfinal StringBuilder strB = new StringBuilder("My reference is final"); strB.append("I'm not immutable");
ম্যাথিয়াস ব্রাউন

1
যেহেতু লম্বোক ভি 1.16.12 এর জন্য পরীক্ষামূলক সমর্থন রয়েছে varprojectlombok.org/features/experimental/var.html
রোল স্পিলকার

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

27

জেইপি - জেডিকে বর্ধন-প্রস্তাব

http://openjdk.java.net/jeps/286

জেপি 286: স্থানীয়-পরিবর্তনশীল প্রকারের অনুক্রম

লেখক ব্রায়ান গোয়েটজ

// Goals:
var list = new ArrayList<String>();  // infers ArrayList<String>
var stream = list.stream();          // infers Stream<String>

জাভা এর কোন সংস্করণ? 10?
পিটার মর্টেনসেন

@ পিটারমোরটেনসেন হ্যাঁ জেইপি 286 জেডিকে 10 এ স্বীকৃত এবং প্রকাশিত হয়েছে ( ওপেনডজ.ডে.ভা.না.ট . / প্রকল্পসমূহ / জেডকি / 10-তে ফিচারগুলির অধীনে 286 দেখুন )।
জাস্টিন আলবানো

20

আমি ইন্টেলিজিজের জন্য একটি প্লাগিন রান্না করেছি যা - একভাবে - আপনাকে varজাভাতে দেয় । এটা একটা হ্যাক, তাই স্বাভাবিক দাবি অস্বীকারসমূহ প্রয়োগ, কিন্তু আপনি যদি আপনার জাভা উন্নয়নের জন্য IntelliJ ব্যবহার এবং এটি ব্যবহার করে দেখতে চাই, এটি এর https://bitbucket.org/balpha/varsity


বর্তমান সম্পাদকের মধ্যে ঘোষিত প্রকারগুলি ভাঁজ / অনাবৃত করার জন্য কীবোর্ড শর্টকাট থাকা ভাল হবে। দুর্দান্ত প্লাগইন যদিও।
হটকি

2
@ হটকি এটি ইন্টেলিজির অন্তর্নির্মিত কোড ফোল্ডিং ব্যবহার করে, যাতে আপনি সিটিআরএল-শিফট-নুমপ্যাডপ্লাসের সাহায্যে সমস্ত কিছু উন্মোচন করতে পারেন। কার্সারটি এমন কোনও লাইনে থাকে যাতে ভাঁজযুক্ত পরিবর্তনীয় ঘোষণা থাকে, আপনি বর্তমান পদ্ধতিতে ঘোষণাকে ভাঁজ / অনাবৃত করতে Ctrl-NumPadPlus এবং Ctrl-NumPadMinus করতে পারেন। সমস্ত ঘোষণাকে ভাঁজ করা কিছুটা বিশ্রীজনক, আপনি সমস্ত কিছু ভাঁজ করে রেখেছেন (Ctrl-Shift-NumPadMinus) এবং তারপরে আবার সবকিছু উন্মোচন করুন (Ctrl-Shift-NumPadPlus)।
বালফা

18

20 মার্চ JDK 10 মুক্তির সঙ্গে, জাভা এখন একটি অন্তর্ভুক্ত varসংরক্ষিত টাইপ নাম (একটি শব্দ দেখুন নিচের নয়) উল্লেখিত JEP 286 । স্থানীয় ভেরিয়েবলের জন্য, নিম্নলিখিতটি এখন জাভা 10 বা উচ্চতরতে বৈধ:

var map = new HashMap<String, Integer>();

varজাভা সংরক্ষিত টাইপ নামের প্রায় অভিন্ন varযে উভয় অন্তর্নিহিত টাইপিং জন্য (গুরুত্বপূর্ণ পার্থক্য নিচে দেখুন) অনুমতি দেয় C # শব্দ। varজাভাতে কেবলমাত্র নিম্নলিখিত প্রসঙ্গগুলিতে অন্তর্নিহিত ধরণের অনুক্রমের জন্য ব্যবহার করা যেতে পারে ( জেপি ২ 28 28: গোলগুলিতে অঙ্কিত হিসাবে ):

  • প্রারম্ভিকগুলির সাথে স্থানীয় ভেরিয়েবল
  • লুপের জন্য বর্ধিত সূচকগুলি
  • স্থানীয়রা traditionalতিহ্যবাহী ফর-লুপে ঘোষণা করে

সুতরাং ক্ষেত্র, রিটার্নের ধরণ, শ্রেণীর নাম বা ইন্টারফেসের নামের জন্য ব্যবহার করা var যাবে না । এর যুক্তিটি হ'ল স্থানীয় ভেরিয়েবলগুলি ঘোষণা এবং সংজ্ঞায়িত করার সময় দীর্ঘ প্রকারের নাম অন্তর্ভুক্ত করার প্রয়োজনীয়তা অপসারণ করা, যেমনটি জেইপি 286 (ব্রায়ান গোয়েজ লিখেছেন) এ বর্ণিত :

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

var জাভা স্কোপিং

এটি লক্ষ করা উচিত যে varজাভাতে কোনও কীওয়ার্ড নয়, বরং একটি সংরক্ষিত টাইপের নাম। জেপি 286 থেকে উদ্ধৃত হয়েছে:

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

মনে রাখবেন যেহেতু varএকটি সংরক্ষিত টাইপের নাম এবং কোনও কীওয়ার্ড নয়, এটি প্যাকেজের নাম, পদ্ধতির নাম এবং পরিবর্তনশীল নামগুলির জন্য (এটির নতুন টাইপ-হস্তক্ষেপের ভূমিকা সহ) ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, varজাভাতে বৈধ ব্যবহারের সমস্ত উদাহরণ নিম্নলিখিত :

var i = 0;
var var = 1;
for (var i = 0; i < 10; i++) { /* ... */ }
public int var() { return 0; }
package var;

জেপি 286 থেকে উদ্ধৃত হয়েছে:

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

varজাভা এবং সি এর মধ্যে পার্থক্য

এটি varসি # তে এবং জাভাতে নিম্নলিখিতগুলির মধ্যে একটি উল্লেখযোগ্য পার্থক্য রয়েছে: সি # তে varটাইপের নাম হিসাবে ব্যবহার করা যেতে পারে তবে জাভাতে শ্রেণীর নাম বা ইন্টারফেসের নাম হিসাবে ব্যবহার করা যায় না। সি # ডকুমেন্টেশন অনুসারে (স্পষ্টভাবে স্থানীয় স্থানীয় ভেরিয়েবলগুলি টাইপ করা হয়েছে) :

যদি নামের কোনও প্রকারের varসুযোগ থাকে তবে varকীওয়ার্ডটি সেই প্রকারের নামটি সমাধান করবে এবং স্পষ্টত টাইপ করা স্থানীয় পরিবর্তনশীল ঘোষণার অংশ হিসাবে বিবেচিত হবে না।

varসি # তে টাইপ নাম হিসাবে ব্যবহারের ক্ষমতা কিছু জটিলতা তৈরি করে এবং কিছু জটিল জটিল বিধি প্রবর্তন করে, যা varজাভাতে varকোনও শ্রেণি বা ইন্টারফেসের নাম হিসাবে অস্বীকার করে এড়ানো হয় । varসি # তে টাইপ নামের জটিলতার বিষয়ে তথ্যের জন্য , নিষেধাজ্ঞাগুলি স্পষ্টত-টাইপড ভেরিয়েবল ঘোষণার ক্ষেত্রে প্রযোজ্য দেখুন । জাভাতে `var এর স্কোপিং সিদ্ধান্তের পিছনে যুক্তি সম্পর্কিত আরও তথ্যের জন্য, JEP 286 দেখুন: স্কোপিং পছন্দগুলি


জাভা এবং সি # এর মধ্যে কোনও পার্থক্য রয়েছে যা আপনি varক্ষেত্র বা রিটার্নের ধরণের জন্য ব্যবহার করতে পারবেন না ? কেন এটি লক্ষ করা গুরুত্বপূর্ণ?
ব্যবহারকারী1306322

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

আমি কেবল সন্ধান করেছি এবং সি # তে মনে হচ্ছে আপনি varএকটি শ্রেণির নাম তৈরি করতে পারেন এবং এটি ব্যবহার করতে পারেন। প্রযুক্তিগতভাবে এটি সি # এর ক্ষেত্রে একটি "প্রসঙ্গের কীওয়ার্ড" তবে জাভাতে মনে হয় আপনি একই কাজটি করতে পারবেন না। আমি ভুল হলে শুধরে.
ব্যবহারকারী1306322

1
আপনি সঠিক. আপনি varজাভাতে কোনও শ্রেণীর নাম বা ইন্টারফেসের নাম হিসাবে ব্যবহার করতে পারবেন না (যা যাইহোক সাধারণ নয়) তবে আপনি এটি পরিবর্তনশীল নাম, পদ্ধতির নাম এবং প্যাকেজের নামের জন্য ব্যবহার করতে পারেন। উদাহরণস্বরূপ, var var = 1;একটি বৈধ জাভা বিবৃতি কিন্তু একটি বর্গ ডিক্লেয়ার করার চেষ্টা হয় public class var {}একটি ত্রুটি মধ্যে ফলাফল: as of release 10, 'var' is a restricted local variable type and cannot be used for type declarations। আমি varজাভাতে পিছনে যুক্তি varএবং সি # এর সাথে এর পার্থক্য সম্পর্কে আরও বিশদ যেতে আরও উপরে উত্তরটি আপডেট করেছি ।
জাস্টিন আলবানো

11

এটি জেডিকে ১০-তে সমর্থিত হবে এটি প্রাথমিক অ্যাক্সেস বিল্ডে এটি কার্যকরভাবে দেখাও সম্ভব ।

JEP 286 :

আরম্ভকারীদের সাথে স্থানীয় ভেরিয়েবলের ঘোষণার ক্ষেত্রে প্রকারের অনুক্রমের প্রসারিত করতে জাভা ভাষা উন্নত করুন।

লেখার পরিবর্তে এখন:

List<> list = new ArrayList<String>();
Stream<> stream = myStream();

তুমি লেখ:

var list = new ArrayList<String>();
var stream = myStream();

মন্তব্য:

  • varএখন একটি সংরক্ষিত টাইপের নাম
  • জাভা এখনও স্থির টাইপিং প্রতিশ্রুতিবদ্ধ!
  • এটি কেবল স্থানীয় পরিবর্তনশীল ঘোষণায় ব্যবহৃত হতে পারে

আপনি যদি নিজের স্থানীয় সিস্টেমে জাভা ইনস্টল না করেই চেষ্টা করে দেখতে চান তবে আমি এটিতে JDK 10 ইনস্টল করে একটি ডকার চিত্র তৈরি করেছি:

$ docker run -it marounbassam/ubuntu-java10 bash
root@299d86f1c39a:/# jdk-10/bin/jshell
Mar 30, 2018 9:07:07 PM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
|  Welcome to JShell -- Version 10
|  For an introduction type: /help intro

jshell> var list = new ArrayList<String>();
list ==> []

3
সাবধান, আপনার প্রদত্ত কোডটি (আগে / পরে var) সমতুল্য নয়। ইন varউদাহরণস্বরূপ listধরনের হয় ArrayList, না একটি List
গিলি

8

একটি সহজ সমাধান (ধরে নিই যে আপনি একটি শালীন আইডিই ব্যবহার করছেন) হ'ল সর্বত্র কেবল 'ইন্ট' টাইপ করুন এবং তারপরে এটি আপনার জন্য টাইপ সেট করে নিন।

আমি আসলে 'var' নামক একটি ক্লাস যুক্ত করেছি যাতে আমার আলাদা কিছু টাইপ করতে হবে না।

কোডটি এখনও খুব ভার্জোজ, তবে কমপক্ষে আপনাকে এটি টাইপ করতে হবে না!


আপনি যখন বলছেন "শালীন আইডিই" গ্রহনটি * বাদ দেওয়া হয়? - এটি লুনায় কাজ করতে দেখা যাচ্ছে না (অন্তত আমি যখন এটির চেষ্টা করেছি int) - আমি কি কিছু মিস করছি? : (* যখন আমি অন্ধকার একটি শালীন আইডিই কল না হবে, আমি অন্যদের জন্য ফয়সালা করে না ...)
BrainSlugs83

@ BrainSlugs83 dunno আমি আইডিইএ ব্যবহার করছি, এর আগে বাস্তবে গ্রহনটি ব্যবহৃত হয়নি। এটি আপনার জন্য প্রকারগুলি সংশোধন করে না? আমি সি # / ভিজ্যুয়াল স্টুডিও / পুনঃভাগে অভ্যস্ত যা আইডিইএর মতো এটি আসলে সঠিকভাবে কাজ করে তা ছাড়া! সমস্ত জেটব্রেইনগুলির মধ্যে আপনি কোনও ত্রুটি থাকলে পরামর্শের একটি তালিকা পেতে Alt-enter টিপতে পারেন - সুতরাং টাইপটি টাইপ করে একটি ত্রুটি পরিচয় করিয়ে দিতে পারেন যা আপনি Alt-enter করতে পারেন এবং প্রকারটি সাজানোর জন্য এটি পেতে পারেন
JonnyRaa

5

তোমার দেখে নিতে পারেন Kotlin JetBrains দ্বারা, কিন্তু এটি Val আছে। না var


4
কোটলিনের ভ্যাল ও ভ্যার রয়েছে। ভল জাভাতে ভেরিয়েবল ফাইনাল ঘোষণার জন্য সমান, ভার পুনরায় নিয়োগের অনুমতি দেয়।
সামলেউইস

5

জাভা 10 স্থানীয় ভেরিয়েবল টাইপ অনুমিতি পেয়েছে, সুতরাং এখন এটি varসি # একের সমান সমান (যতদূর আমি সচেতন)।

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

একটি পার্থক্য যা আমি খুঁজে পেতে পারি তা হ'ল সি # তে,

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

জাভা 10 varএ কোনও আইনি ধরণের নাম নয়।


@ লিঁ হ্যাঁ, আমি এখানে কী বোঝাতে চাইছিলাম তা মুছে ফেলেছি I
আলেক্সি রোমানভ

গ্রেট! ইতিহাস মুছে ফেলতে আমার মন্তব্য মুছে ফেলবে!
লিই

4

জাভা 10 হিসাবে, সমতূল্য ... var


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

@ user1306322 এটি সম্পূর্ণ পৃথক প্রশ্ন! আপনি জাভা -10 ট্যাগটি চেক করতে পারেন, কারণ এর অনেক দিক ইতিমধ্যে জিজ্ঞাসা করা হয়েছে।
ব্রায়ান গয়েটজ

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

3

আমি জানি এটি আরও পুরানো তবে কেন কোনও ভ্যার ক্লাস তৈরি করা যায় না এবং বিভিন্ন প্রকারের সাথে কনস্ট্রাক্টর তৈরি করা হয় না এবং নির্ভর করে কি কনস্ট্রাক্টররা আহ্বান করে তার উপর নির্ভর করে আপনি বিভিন্ন ধরণের সাথে ভের পাবেন। আপনি এমনকি এক ধরণের অন্য ধরণের রূপান্তর করতে পদ্ধতিগুলি তৈরি করতে পারেন।


3

Lombokবিভিন্ন সমর্থন করে তবে এটি পরীক্ষামূলক হিসাবে শ্রেণিবদ্ধ করা হয়েছে:

import lombok.experimental.var;

var number = 1; // Inferred type: int
number = 2; // Legal reassign since var is not final
number = "Hi"; // Compilation error since a string cannot be assigned to an int variable
System.out.println(number);

এটি ব্যবহারের চেষ্টা করার সময় এড়াতে এখানে একটি সমস্যা রয়েছে IntelliJ IDEA। এটি অটোর সমাপ্তি এবং সমস্ত কিছু সহ প্রত্যাশিত হিসাবে কাজ করে বলে মনে হচ্ছে। কোনও "নন-হ্যাকি" সমাধান না হওয়া পর্যন্ত (যেমন জেপি 286: লোকাল-ভেরিয়েবল টাইপ ইনফারেন্সির কারণে ), এখনই এটি আপনার সেরা বেট হতে পারে।

নোট করুন যা কোনও পাশাপাশি কোনও পরিবর্তন বা তৈরি না valকরে সমর্থন করে ।Lomboklombok.config


2

আপনি জাভা 10 এ পারবেন তবে কেবল স্থানীয় ভেরিয়েবলের জন্য, অর্থাত্

আপনি পারেন,

var anum = 10; var aString = "Var";

কিন্তু পারে না,

var anull = null; // Since the type can't be inferred in this case

পরীক্ষা করে দেখুন বৈশিষ্ট আরও তথ্যের জন্য।


2
এটি ভুল। varক্যাপচারের ধরণ, ছেদ করার ধরণ এবং বেনাম বর্গ ধরণের সহ নন-ডোনোটেবল ধরণের বিভিন্ন ফর্মের জন্য ব্যবহার করা যেতে পারে। এবং জাভা 11 হিসাবে এটি ল্যাম্বডা পরামিতিগুলিতে প্রয়োগ করা যেতে পারে।
ব্রায়ান গয়েটজ 4'18

0

সাধারণভাবে আপনি যে কোনও ধরণের জন্য অবজেক্ট ক্লাস ব্যবহার করতে পারেন, তবে আপনার পরে টাইপ কাস্টিং রয়েছে!

উদাহরণ: -

Object object = 12;
    Object object1 = "Aditya";
    Object object2 = 12.12;

    System.out.println(Integer.parseInt(object.toString()) + 2);

    System.out.println(object1.toString() + " Kumar");
    System.out.println(Double.parseDouble(object2.toString()) + 2.12);

আদিত্য, আপনার অন্য সমস্ত উত্তর চেক করুন। তাদের অনেকেরই -1 রয়েছে এবং সম্ভবত কোনও ভাল কারণে। আপনি যদি নিশ্চিত হন যে এটি সঠিক নয় তবে যা কিছু পোস্ট করবেন না।
ব্যবহারকারী1306322

@ user1306322 আমার উত্তরে সমস্যা কি! আপনি বিস্তারিত বলতে পারেন? আমরা কি সমস্ত ডাটা টাইপের জন্য অবজেক্ট ক্লাস ব্যবহার করতে পারি না?
আদিত্য কুমার

অবজেক্ট অবজেক্ট = 12; অবজেক্ট অবজেক্ট 1 = "আদিত্য"; অবজেক্ট অবজেক্ট 2 = 12.12; System.out.println (Integer.parseInt (object.toString ()) + 2); System.out.println (object1.toString () + "কুমার"); System.out.println (Double.parseDouble (object2.toString ()) + 2.12);
আদিত্য কুমার

সমস্যাটি হচ্ছে আপনি প্রশ্নটি বুঝতে পারছেন না। প্রশ্নটি "এই কাজটি কীভাবে করা যায়" তা নয়, "" এরকম কিছু আছে কি "। আপনি ভুল প্রশ্নের উত্তর দিন। varভাষাতে এখন আনুষ্ঠানিকভাবে শব্দটি সহ , আপনার উত্তরটি এখনকার পুরানো কালের পদ্ধতিতেও উল্লেখ করছে।
ব্যবহারকারী1306322

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