জাভা পদ্ধতির স্বাক্ষরের পরে অদ্ভুত "[]"


119

আমি আজ কিছু জাভা কোড দেখেছি এবং আমি কিছু অদ্ভুত বাক্য গঠন খুঁজে পেয়েছি:

public class Sample {
  public int get()[] {
    return new int[]{1, 2, 3};
  }
}

আমি ভেবেছিলাম যে এটি সংকলন করতে পারে না এবং আমি যা টাইপো বলেছিলাম তা স্থির করতে চেয়েছিলাম, কিন্তু তখন মনে পড়ে জাভা সংকলক আসলে এটি গ্রহণ করেছিল!

কেউ দয়া করে এর অর্থ কী তা বুঝতে আমাকে সাহায্য করতে পারেন? এটি কি ফাংশনগুলির একটি অ্যারে?


10
ওহ, ওটা .. অদ্ভুত ...; ডি
ন্যান্ন

6
এই মন্তব্য দেখতে stackoverflow.com/questions/1995113/strangest-language-feature/...
josefx

2
ক্রেজিস্ট ... থিং আমি যা দেখেছি তারা বলে রুবিতে অনেক ম্যাজিক আছে, সেই রুবি খাও!
আইএডাপ্টার

16
এমনকি কোনও ফাংশনের স্বাক্ষরের তুলনায় দূরবর্তীভাবে অদ্ভুত দেখাচ্ছে না যা সি এর ফাংশনগুলিতে পয়েন্টারগুলির বিন্যাসে একটি পয়েন্টার দেয়: :)
কোস

উত্তর:


111

এটি এমন একটি পদ্ধতি যা একটি ফেরত দেয় int[]

জাভা ভাষার স্পেসিফিকেশন (8.4 পদ্ধতি ঘোষণা)

জাভা প্ল্যাটফর্মের পুরানো সংস্করণগুলির সাথে সামঞ্জস্যের জন্য, কোনও পদ্ধতির ঘোষণার ফর্ম যা অ্যারে ফিরিয়ে দেয় সেগুলি প্যারামিটার তালিকার পরে অ্যারে প্রকারের ঘোষণার রূপটি খালি বন্ধনী জোড়া রাখার অনুমতি দেওয়া হয় (কিছু বা সমস্ত)।

এটি অপ্রচলিত উত্পাদন দ্বারা সমর্থিত:

মেথডেক্লেটার :
    মেথডডেক্লেটার []

তবে নতুন কোডে ব্যবহার করা উচিত নয়।


92
এর সেরাটি হ'ল এটি কিছু বা সমস্ত কিছু । সুতরাং আপনার কাছে যদি কোনও ত্রি-মাত্রিক অ্যারেগুলি ফেরত দেওয়ার কোনও পদ্ধতি থাকে তবে আপনি এটি করতে পারেন: public int[] foo()[][] {এবং মানুষের চোখের রক্ত ​​ঝরঝরে করুন।
কোয়ান

আমাকে বলতে হবে যে আমি যেহেতু কোডটি দেখেছি আমি উচ্চস্বরে হাসছি ! :-D
sdlins

20

এটি একটি মজার প্রশ্ন। জাভাতে আপনি বলতে পারেন int[] a;, পাশাপাশি int a[];
এই দৃষ্টিকোণ থেকে, একই ফলাফল পেতে কেবল সরানো []
এবং লিখতে হবে public int[] get() {
তবুও দেখে মনে হচ্ছে কোডটি কোনও অবলম্বনকারী থেকে এসেছে ...


2
একটি অবচেতন থেকে? সি প্রোগ্রামার থেকে সম্ভবত (আপনি কোনও অ্যারে ফিরিয়ে দিতে পারবেন না, তবে অ্যারে টাইপের কোনও পয়েন্টার - হ্যাঁ .. এবং এটি দেখতে দেখতে একইরকম হবে)।
কোস

4
@ কোস: আপনি কেন বোঝাচ্ছেন যে একজন অবফসকেটর এবং একজন সি প্রোগ্রামার অবশ্যই দুটি আলাদা জিনিস হতে পারে? অনেক সময় তারা হয় না!
লই

10

যেহেতু একটি সি ট্যাগ রয়েছে, আমি উল্লেখ করব যে সি এবং সি ++ তে একটি অনুরূপ (তবে অভিন্ন নয়) স্বরলিপি পাওয়া সম্ভব:

এখানে ফাংশনটি f10 ইন্টির অ্যারেতে একটি পয়েন্টার দেয়।

int tab[10];

int (*f())[10]
{
    return &tab;
}

জাভা কেবল নক্ষত্র এবং প্রথম বন্ধনী প্রয়োজন হয় না।


কোনও ফাংশনটির জন্য একটি এন ডাইমেনশনাল অ্যারেতে পয়েন্টার ফিরিয়ে দেওয়ার জন্য আরও সহজ বাক্য গঠন আছে? (কেবলমাত্র কোনও ইনট * নয়)
টেড

বাস্তবিক, আমি যোগ করতে হবে, পিসিসি সমর্থন সরাসরি f()[]ভালো কিছু অর্থ (*f())
AnArrayOfFunitions

4

জাভা সিনট্যাক্স নিম্নলিখিত জন্য অনুমতি দেয়:

int[] intArr = new int[0];

এবং যদিও

int intArr[] = new int[0];

যা দেখতে সি-স্টাইল সিনট্যাক্স থেকে আগত আরও অচেনা।

এছাড়াও, একটি ফাংশন সহ, নামটি [] এর আগে বা পরে আসতে পারে এবং প্রকারটি এখনও অবধি []


1
এটি সত্যই অন্তর্নিহিত হওয়া উচিত কারণ এটি আমাকে বিরক্ত করে [] কারণ এটি অ্যারে হ'ল এটি নামের অংশ নয়, প্রকারের একটি অংশ। যে পোস্টগ্র্যাড আমার ইউনি জাভা পাঠ্যক্রম লিখেছেন তার কোডটিতে সর্বদা বিপরীত কাজ করে, এটি ভয়াবহ!
ড্যানপালমার

1
@ এডানপালমার, আমি একমত, যদিও নিজেকে এসি প্রোগ্রামার জুতাতে রেখেছেন যিনি নিজের রক্তে ইনট নাম লেখার জন্য জোর করে নিজের রক্তে রেখেছেন []। যাইহোক, এটি এত বড় বিষয় নয়, ভাষা উভয়কেই সমর্থন করে এবং বেশিরভাগ জাভা প্রোগ্রামাররা ইন [কনস] কনভেনশনটি ব্যবহার করে, তাই বিরক্তিকর পোস্টগ্রাড বা দু'টি বিরল বিরল। কে জানে, এটা এমনকি আপনার পক্ষে কাজ করতে পারে যদি তারা আপনার ফাইনালে এই মত একটি প্রশ্ন জিজ্ঞাসা
ডেভিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.