החזרת מספר ערכים מפקונציה ב Java - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


עמיר

Recommended Posts

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

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

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

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

קישור לתוכן
שתף באתרים אחרים

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

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

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

קישור לתוכן
שתף באתרים אחרים

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

ד.א. החזרת יותר מערך החזרה אחד הוא מעשה דיי "מלוכלך". בדרך כלל מתודות אמורות לעשות דבר אחד, ולא 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#....

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

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...