অনুবাদ রেফারেন্স

প্রকারভেদ

  • আদিম প্রকারের জন্য, J2ObjC JNI-শৈলী টাইপডেফ সংজ্ঞায়িত করেছে।
  • সাধারণ শ্রেণির ধরনগুলির জন্য, প্যাকেজটি উট-কেসযুক্ত এবং শ্রেণির নামের সাথে যুক্ত।
  • বেস অবজেক্ট টাইপ এবং সব ধরনের ভেরিয়েবলের জন্য, "id" ব্যবহার করা হয়।
  • কয়েকটি মূল জাভা প্রকার ফাউন্ডেশন প্রকারের সাথে ম্যাপ করা হয়। (যেমন স্ট্রিং থেকে NSString)
  • 'ভোলাটাইল' ঘোষিত ক্ষেত্রগুলির জন্য, J2ObjC-এর আরও টাইপডেফ রয়েছে যা C11 _Atomic(...) প্রকারগুলি ব্যবহার করে।
  • অভ্যন্তরীণ প্রকারের জন্য অভ্যন্তরীণ শ্রেণীর নামটি একটি আন্ডারস্কোর সহ বাইরের নামের সাথে যুক্ত করা হয়।
জাভা টাইপ অবজেক্টিভ-সি টাইপ উদ্দেশ্য-সি উদ্বায়ী প্রকার
বুলিয়ান jboolean volatile_jboolean
চর jchar volatile_jchar
বাইট jbyte volatile_jbyte
সংক্ষিপ্ত jshort volatile_jshort
int জিন্ট volatile_jint
দীর্ঘ jlong volatile_jlong
ভাসা jfloat volatile_jfloat
দ্বিগুণ jduble volatile_jdouble
java.lang.অবজেক্ট আইডি volatile_id
ভেরিয়েবল টাইপ করুন আইডি volatile_id
java.lang.String NSString* volatile_id
java.lang.Number NSNumber* volatile_id
java.lang.ক্লোনযোগ্য এনএসকপি করা হচ্ছে* volatile_id
foo.bar.bumble FooBarMumble* volatile_id
foo.bar.Mumber$Inner FooBarMumble_Inner* volatile_id

পদ্ধতি

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

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

উদাহরণ পদ্ধতি

পদ্ধতির নামগুলি নিম্নরূপ তৈরি করা হয়:

  • জিরো প্যারামিটার পদ্ধতি অপরিবর্তিত
  • এক বা একাধিক প্যারামিটার নিম্নলিখিত প্যাটার্ন ব্যবহার করে:
    • <java name>With<1st param keyword>:with<2nd param keyword>:with<3rd param keyword>:
  • প্যারামিটার কীওয়ার্ড নিয়ম:
    • আদিম প্রকারের জন্য, কীওয়ার্ড হল জাভা আদিম-এর ক্যাপিটালাইজড নাম। (যেমন "চর")
    • নন-প্রিমিটিভ টাইপের জন্য, কীওয়ার্ড হল ক্যামেল-কেসড সম্পূর্ণ যোগ্য ধরনের নাম। (যেমন "ComGoogleFoo")
    • অ্যারে প্রকারের জন্য, "অ্যারে" উপাদানের প্রকারের কীওয়ার্ডের সাথে যুক্ত করা হয়।
উদাহরণ জাভা
interface Foo {
  void bar();
  String bar(int i);
  java.util.List bar(String s, long[] l);
}
উদাহরণ উদ্দেশ্য-C
- (void)bar;

- (NSString *)barWithInt:(jint)i;

- (id<JavaUtilList>)barWithNSString:(NSString *)s
                      withLongArray:(IOSLongArray *)l;

স্ট্যাটিক পদ্ধতি

ইনস্ট্যান্স পদ্ধতির মতো একই নামকরণের নিয়ম অনুসরণ করে একটি অবজেক্টিভ-সি ক্লাস পদ্ধতি যোগ করা হয়।

নিম্নলিখিত নামকরণের নিয়মগুলি ব্যবহার করে একটি সি-স্টাইল ফাংশন যোগ করা হয়েছে:

  • উৎপন্ন অবজেক্টিভ-সি নির্বাচক দিয়ে শুরু করুন। (যেমন barWithInt: )
  • আন্ডারস্কোর দিয়ে কোলন প্রতিস্থাপন করুন। (যেমন barWithInt_ )
  • একটি আন্ডারস্কোর দিয়ে সীমাবদ্ধ করে, ক্লাসের নামটি প্রিপেন্ড করুন। (যেমন। ComGoogleFoo_barWithInt_ )
উদাহরণ জাভা
package com.google;
class Foo {
  static boolean bar() { ... }
  static double bar(int[] i) { ... }
  static void bar(String s, boolean b) { ... }
}
উদাহরণ উদ্দেশ্য-C
@interface Foo : NSObject

+ (jboolean)bar;

+ (jdouble)barWithIntArray:(IOSIntArray *)i;

+ (void)barWithNSString:(NSString *)s
            withBoolean:(jboolean)b;

@end

FOUNDATION_EXPORT jboolean ComGoogleFoo_bar();

FOUNDATION_EXPORT jdouble ComGoogleFoo_barWithIntArray_(IOSIntArray *i);

FOUNDATION_EXPORT void ComGoogleFoo_barWithNSString_withBoolean_(NSString *s, jboolean b);

কনস্ট্রাক্টর

অবজেক্টিভ-সি কনভেনশন অনুসরণ করে, একটি init ইনস্ট্যান্স পদ্ধতি যোগ করা হয়েছে। কনস্ট্রাক্টরের পরামিতি থাকলে, উদাহরণ পদ্ধতি হিসাবে একই নামকরণের নিয়ম ব্যবহার করা হয়।

তিনটি সি-স্টাইল ফাংশন যোগ করা হয়েছে:

  • প্রথম ফাংশন একটি নতুন বরাদ্দকৃত বস্তুকে তার প্রথম প্যারামিটার হিসাবে গ্রহণ করে। এই ফাংশনটি সাধারণত সাবক্লাস কনস্ট্রাক্টর থেকে কল করার জন্য ব্যবহৃত হয়। এটি স্ট্যাটিক পদ্ধতির মতো একই নামকরণের নিয়ম অনুসরণ করে। (যেখানে "init" পদ্ধতির নাম)
  • দুটি ফাংশন যোগ করা হয়েছে যা নতুন অবজেক্টকে বরাদ্দ এবং আরম্ভ করবে। তারা তাদের উপসর্গ দ্বারা পৃথক করা হয়:
    • create_ ফাংশন একটি স্বয়ংক্রিয়ভাবে প্রকাশিত অবজেক্ট ফিরিয়ে দেবে।
    • new_ ফাংশন একটি ধরে রাখা বস্তু ফিরিয়ে দেবে।
উদাহরণ জাভা
package com.google;
class Foo {
  Foo() { ... }
  Foo(Object a, Object b) { ... }
}
উদাহরণ উদ্দেশ্য-C
@interface ComGoogleFoo : NSObject

- (instancetype)init;

- (instancetype)initWithId:(id)a
                    withId:(id)b;

@end

FOUNDATION_EXPORT void ComGoogleFoo_init(ComGoogleFoo *self);

FOUNDATION_EXPORT ComGoogleFoo *new_ComGoogleFoo_init() NS_RETURNS_RETAINED;

FOUNDATION_EXPORT ComGoogleFoo *create_ComGoogleFoo_init();

FOUNDATION_EXPORT void ComGoogleFoo_initWithId_withId_(ComGoogleFoo *self, id a, id b);

FOUNDATION_EXPORT ComGoogleFoo *new_ComGoogleFoo_initWithId_withId_(id a, id b) NS_RETURNS_RETAINED;

FOUNDATION_EXPORT ComGoogleFoo *create_ComGoogleFoo_initWithId_withId_(id a, id b);

ক্ষেত্র

উদাহরণ ক্ষেত্র (অ-স্থির)

জাভা ইনস্ট্যান্স ভেরিয়েবল অবজেক্টিভ-সি ইনস্ট্যান্স ভেরিয়েবলে পরিণত হয়। নামটি ট্রেলিং আন্ডারস্কোরের সাথে একই। "চূড়ান্ত" ঘোষিত আদিম ক্ষেত্রগুলি একটি বিশেষ ক্ষেত্রে এবং উদাহরণ ভেরিয়েবলে অনুবাদ করা হয় না।

  • ক্ষেত্রগুলি "->" সিনট্যাক্স ব্যবহার করে সরাসরি অ্যাক্সেস করা যেতে পারে।
  • আদিম ক্ষেত্র সরাসরি সেট করা যেতে পারে.
    • চূড়ান্ত আদিম (ধ্রুবক) স্ট্যাটিক ধ্রুবকের মত অনুবাদ করা হয়। ( স্থির ক্ষেত্র দেখুন)
  • অ-আদি ক্ষেত্রগুলি অবশ্যই প্রদত্ত সেটার ফাংশন ব্যবহার করে সেট করতে হবে:
    • ClassName_set_fieldName_(instance, value)
উদাহরণ জাভা
package com.google;
class Foo {
  public int myInt;
  public String myString;
}
উদাহরণ উদ্দেশ্য-C
Foo *foo = [[Foo alloc] init];

// Access a primitive field.
i = foo->myInt_;

// Set a primitive field.
foo->myInt_ = 5;

// Access a non-primitive field.
NSString *s = foo->myString_;

// Set a non-primitive field.
ComGoogleFoo_set_myString_(foo, @"bar");

স্ট্যাটিক ক্ষেত্র

স্ট্যাটিক ভেরিয়েবল অবশ্যই প্রদত্ত গেটার এবং সেটার ফাংশন ব্যবহার করে অ্যাক্সেস করতে হবে। এই অ্যাক্সেসর ফাংশনগুলি নিশ্চিত করে যে ভেরিয়েবল অ্যাক্সেস করার আগে ক্লাস ইনিশিয়ালাইজেশন হয়েছে।

  • একটি স্ট্যাটিক ক্ষেত্র অ্যাক্সেস করুন
    • ClassName_get_fieldName()
  • একটি (অ-চূড়ান্ত) স্ট্যাটিক ক্ষেত্র বরাদ্দ করুন
    • ClassName_set_fieldName()
  • একটি আদিম স্ট্যাটিক ক্ষেত্রের একটি পয়েন্টার পান
    • ClassName_getRef_fieldName()
    • শুধুমাত্র অ-ফাইনাল এবং অ-অস্থির ক্ষেত্রের জন্য উপলব্ধ।

চূড়ান্ত আদিম ক্ষেত্রগুলি (ধ্রুবক) সরাসরি অ্যাক্সেস করা নিরাপদ কারণ তাদের মান ক্লাস শুরুর উপর নির্ভর করে না।

  • ClassName_fieldName
উদাহরণ জাভা
package com.google;
class Foo {
  public static final MY_FINAL_INT = 5;
  public static int myInt;
  public static String myString;
}
উদাহরণ উদ্দেশ্য-C
// Access a primitive constant field.
jint i = ComGoogleFoo_MY_FINAL_INT;   // No class initialization
i = ComGoogleFoo_get_MY_FINAL_INT();  // Class initialization

// Access a primitive field.
i = ComGoogleFoo_get_myInt();

// Set a primitive field.
ComGoogleFoo_set_myInt(5);

// Access a non-primitive field.
NSString *s = ComGoogleFoo_get_myString();

// Set a non-primitive field.
ComGoogleFoo_set_myString(@"bar");

এনামস

J2ObjC প্রতিটি জাভা এনামের জন্য দুটি প্রকার তৈরি করে। একটি অবজেক্টিভ-সি ক্লাস টাইপ তৈরি করা হয় যা জাভা এনামের সম্পূর্ণ কার্যকারিতা প্রদান করে। উপরন্তু ফাউন্ডেশন ফ্রেমওয়ার্কের NS_ENUM ম্যাক্রো ব্যবহার করে একটি C enum তৈরি করা হয়। অবজেক্টিভ-সি ক্লাস টাইপ সমস্ত জেনারেট করা API দ্বারা ব্যবহৃত হয়। C enum একটি সুইচ স্টেটমেন্টের জন্য ধ্রুবক মান হিসাবে বা স্টোরেজ টাইপ হিসাবে দরকারী।

উত্পন্ন enum প্রকারগুলি নিম্নরূপ নামকরণ করা হয়:

  • একটি নিয়মিত জাভা ক্লাসের মতো একই নিয়ম ব্যবহার করে অবজেক্টিভ-সি ক্লাসের নামকরণ করা হয়েছে। ( প্রকার দেখুন)
  • C enum একটি যোগ করা "_Enum" প্রত্যয় সহ একটি নিয়মিত জাভা ক্লাস হিসাবে নামকরণ করা হয়েছে।

এনাম ধ্রুবকগুলি স্ট্যাটিক ক্ষেত্রের মতো অ্যাক্সেস করা হয়।

উদাহরণ জাভা
package com.google;
enum Color {
  RED, GREEN, BLUE
}
উদাহরণ অবজেক্টিভ-সি হেডার
typedef NS_ENUM(NSUInteger, ComGoogleColor_Enum) {
  ComGoogleColor_Enum_RED = 0;
  ComGoogleColor_Enum_GREEN = 1;
  ComGoogleColor_Enum_BLUE = 2;
};

@interface ComGoogleColor : JavaLangEnum < NSCopying >
+ (IOSObjectArray *)values;
+ (ComGoogleColor *)valueOfWithNSString:(NSString *)name;
@end

inline ComGoogleColor *ComGoogleColor_get_RED();
inline ComGoogleColor *ComGoogleColor_get_GREEN();
inline ComGoogleColor *ComGoogleColor_get_BLUE();

// Provides conversion from ComGoogleColor_Enum values.
FOUNDATION_EXPORT ComGoogleColor *ComGoogleColor_fromOrdinal(NSUInteger ordinal);