עבור לתוכן

החזרת מספר ערכים מפקונציה ב Java

Featured Replies

פורסם

האם הדרך הכי נורמלית להחזיר מספר ערכים מפונקציה ב Java היא לבנות מחלקה מיוחדת שמאגדת אותם ?

האם ב Java 5/6 יש משהו שדומה ל ref ו/או out ב C# ?

פורסם

אני לא מכיר דרך יפה. אתה יכול להחזיר מערך של Object.

פורסם

לפני שאתה ממהר לקודד קלאס משלך כדי שיכיל אוסף של מספרים

תבדוק איזה קלאסים של אוספים (Collections) קיימים בספריות של java

אני לא יודע java אבל אני בטוח שכמו ב- .net חייבים להיות קלאסים של collections

אשר יכולים להכיל אוסף של אובייקטים והפונקציה שלך צריכה להחזיר אוסף אחד כזה

פורסם
  • מחבר

כן, אבל אני יכול באותה מידה להחזיר מערך של אובייקטים, נראה לי כבר יותר מהר ולא פחות מסריח...

טוב, כנראה שאין משהו יותר נורמלי.

פורסם

אוספים טובים כאשר אינך יודע מראש מספר האיברים שאתה צריך להחזיר

אם זה לא המקרה , אז גם מערכים טוב

פורסם
  • מחבר

כן, האנלוגיה שחיפשתי היא משהו דומה ל out ב C# שם אפשר לכתוב

void func(out someclass a, out someclass b) {...}

ואז a, b עוברים ברפרנס במקום בהעתקה ואפשר לשנות על מה הם מצביעים (ואז כמובן גם יודעים כמה משתנים יש וכו')

פורסם

קראתי שב- java אכן אין call by reference for primitive values , רק לאובייקטים

פורסם

השאלה היא האם יש רפרנסים לרפרנס של האובייקט. משום מה זכור לי שבהרצאה המרצה אמרה שניתן, אך אני לא מוצר את זה בהרצאות הכתובות שלה. אולי אני לא זוכר טוב. בכל מקרה, שלחתי אימייל למתרגל(נקווה שהוא יענה, מכיוון שהקורס היה בסמסטר שעבר, ויש עכשיו שביתה, למרות שהוא נורא נחמד).

ד.א. החזרת יותר מערך החזרה אחד הוא מעשה דיי "מלוכלך". בדרך כלל מתודות אמורות לעשות דבר אחד, ולא 2 פעולות. תשים לב אם התכנון שלך נכון.

פורסם

בקצרה: אין דרך פשוטה, וגם לא תהייה.

בכנס JavaOne שמתקיים כל שנה בסן פרנסיסקו היה דיון על הנושא בשנת 2005. מתברר, שמכיוון שיש עשרות מימושי Java, וזה הכח העיקרי שלה מעל .net, אז מפחדים לעשות שינויים ששוברים תאימות בצורה קשה. בעיקר לא שינויים שאין להם "שום ערך" במובן הרחב של פלטפורמת Java.

עלו מספר הצעות:

1. תמיכה ב-out parameters, כמו ב-C#. די נפסל על הסף, כי זה הכי מגעיל, וגם יוצר הכי הרבה בעיות תאימות.

2. תמיכה ישירה ברוטינה שמחזירה tupple. (אני לא מצליח לכתוב את זה בגלל העברית). משהו כמו: a,b=xxx, אבל בתוך <>.

גם זה יוצר בעיות תאימות קשות. גם נפסל.

3. הכוון היחיד שהיה לו סיכוי זה מה שנקרא "syntactic sugar", כלומר, שהמתכנת יכתוב a,b=xxx, או משהו כזה,

אך הקומפיילר לקמפל את זה ע"י הגדרה של class, ושימוש בו, בצורה שקופה. בשיטה זו לא צריך שינוי ב-JVM.

כך למשל ממומשים מספר דברים ב-Java. (לדוגמא, חיבור מחרוזות מתמפה לקריאה ל-StringBuilder).

הבעיה עם דרך זו היא שכאשר מתחילים לפרוט אותה לכל מני מקרי קצה, אז רואים בעיות רבות. למשל, איך זה מתנהג בירושה. איך זה מתנהג עם versioning, כלומר שהרוטינה הקוראת והנקראית לא מאותה גירסא. למשל, איך זה עובר דרך reflection. אין זה נראה ב-RMI. איך זה מתנהג ב-debugger. ועוד ועוד.

שהוצגו אוסף הבעיות, מאוד מהר הגענו להסכמה פה אחד שלא כדאי. ולכן אין!

דורון.

פורסם
  • מחבר

כן, חבל שהם לא מרשים לעצמם יותר חופש פעולה כמו C# במעבר ל 2, גם מעצבן שלא הוסיפו ב java 6 אפשרות כמו emit ב C#....

בכל מקרה, ראיתי דוגמא שמישהו מעביר את הפרמטר כמערך עם ערך אחד (ואז אפשר לשנות את מה שהתא במערך מצביע עליו).

בסוף פשוט הגדרתי מחלקה חדשה שמעבירה את זה.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים