» נושאי לימוד
» נושאי לימוד
יום שני 29 באפריל 2024
ארגומנטים משורת הפקודה
דף ראשי  מתחילים  ארגומנטים משורת הפקודה גרסה להדפסה

ארגומנטים משורת הפקודה

 

- מבוא

- דיון

- שאלות  סיכום

 


 

מבוא

סטודנטים בקורס הקדמה לתכנות Java אחראים לידיעת והבנת כל החומר בשעור זה
(חוץ מנושאים ספציפיים ב –
C++).

הנושאים הספציפיים ב – C++ מוצעים כחומר משלים לטובת אלו שמכירים כבר C++
ומבצעים הסבה ל –
Java.

 

דיון

 

דוגמאות מוכרות מ‑DOS    

 

ב‑Java וגם ב‑++C ניתן לכתוב תוכנית שתקבל ארגומנטים משורת הפקודה.

 

משתמשי DOS מכירים פקודות כגון:

 

copy fileA fileB

 

במקרה זה, copy  הוא שם התוכנית שאנו מעונינים לבצע, ו‑fileA ו‑fileB הם ארגומנטים משורת הפקודה.

 

התחביר של ++C עבור ארגומנטים משורת הפקודה

 

אופן הטיפול בארגומנטים משורת הפקודה שונה בין Java ל‑++C. מתכנתי ++C מכירים את התחביר הבא, שבו משתמשים בפונקציית ()main על מנת ללכוד ארגומנטים משורת הפקודה.

 

void main(int argc, char *argv[]){
. . .
}//end main function

 

במקרה זה מערכת ההפעלה מעבירה לפונקציה שני פרמטרים. argc הוא integer שמציין את מספר הארגומנטים משורת הפקודה, ו‑argv הוא מערך של מחוונים, שבו כל מחוון מצביע על אחד הארגומנטים משורת הפקודה, המאוחסן כמחרוזת במקום כלשהו בזיכרון. במערכות מסוימות argv[0] יצביע על מחרוזת שהיא שם התוכנית, ואילו במערכות אחרות argv[0] יצביע על זבל.

 

ב‑++C, אם התוכנית אינה מיועדת לקבל ארגומנטים משורת הפקודה, אין זה הכרחי לציין את הפרמטרים ברשימת הארגומנטים של הצהרת הפונקציה.

 

התחביר של Java עבור ארגומנטים משורת הפקודה

 

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

 

public static void main(String[] args){
. . . 
}//end main method

 

 

היכן הארגומנטים מאוחסנים?

 

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

 

מה לגבי שם התוכנית?

 

בניגוד ל‑++C, שם התוכנית אינו ניתן במערך args ב‑Java .

 

כמה ארגומנטים הכניס המשתמש?

 

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

 

תוכנית Java לדוגמא

 

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

 

 

אפליקציית Java להמחשת השימוש בארגומנטים משורת הפקודה ב‑Java .

 

כאשר מריצים את התוכנית משורת הפקודה באופן הבא:

 

java cmdlin01 My command line arguments

 

/*File cmdlin01.java Copyright 1997, R.G.Baldwin
This Java application illustrates the use of Java 
command-line arguments.

When this program is run from the command line as follows:

java cmdlin01 My command line arguments

the program produces the following output:

My
command
line
arguments
********************************************************/
class cmdlin01 { //define the controlling class
  public static void main(String[] args){ //main method
    for(int i=0; i < args.length; i++)
    System.out.println( args[i] );
  }//end main
}//End cmdlin01 class.  

 

 

תוכנית ++C לדוגמה

 

לשם השוואה, תוכנית ++C שלהלן בנויה לחקות את התנהגותה של תוכנית Java הקודמת.
הפלט המתקבל מהרצת התוכנית עם הקלט המצוין, מובא שוב בהערות שבתחילת התוכנית.
שים לב שהמערכת, אשר הידרה והריצה את התוכנית, הציגה בפלט גם את שם התוכנית.

 

התוכנית ממחישה שימוש בארגומנטים משורת הפקודה ב‑++C.

 

כאשר מריצים את התוכנית עם הקלט הבא:

 

c:\jnk\cmdlin01 My command line arguments

 

 

/*File cmdlin01.cpp  Copyright 1997, R.G.Baldwin
This C++ application illustrates the use of command-line
arguments.

When this program is run with the following input

c:\jnk\cmdlin01 My command line arguments

it produces the following output

C:\JNK\CMDLIN01.EXE
My
command
line
arguments
********************************************************/

#include<iostream.h

class cmdlin01 {
public:
  static void classMain(int argc, char* argv[]);
};//End cmdlin01 class definition.

//The loop in this function requires the function to be
// defined outside the class (loops are not allowed in
// inline functions)
void cmdlin01::classMain(int argc, char* argv[]){
  for(int i = 0; i < argc; i++) cout << argv[i] << endl;
}//end classMain
//=====================================================//

void main(int argc, char* argv[])
{
  //call the class method named classMain
  cmdlin01::classMain(argc,argv);
}//end main

 

 

 

שאלות סיכום

 

 

ש: הבא דוגמה נפוצה להוראת שורת-פקודה הממחישה את השימוש בארגומנטים משורת הפקודה.

 

 ת: ניתן לכתוב תוכניות Java אשר מקבלות ארגומנטים משורת הפקודה. משתמשי DOS מכירים פקודות כגון

 

copy fileA fileB

 

 

במקרה זה, copy  הוא שם התוכנית שאנו מעונינים לבצע, ו‑fileA ו‑fileB הם ארגומנטים משורת הפקודה.

 

ש: תאר את יעודם של ארגומנטים משורת הפקודה.

 

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

 

ש: ב‑Java יש לנקוט בתחביר של הצהרת המתודה של מתודת main באמצעים המיועדים להשגת ארגומנטים משורת הפקודה, גם אם שאר התוכנית אינו מיועד לעשות בהם שימוש: אמת או שקר? אם שקר, הסבר.

 

ת: אמת. ב‑Java יש לנקוט בתחביר של הצהרת המתודה של מתודת main באמצעים המיועדים להשגת ארגומנטים משורת הפקודה, גם אם שאר התוכנית אינו מיועד לעשות בהם שימוש.

 

ש: הבא את הצהרת המתודה של מתודת main באפליקציית Java, שמיועדת להשגת ארגומנטים משורת הפקודה. ציין את החלק בהצהרת המתודה שנוגע לארגומנטים משורת הפקודה,
והסבר כיצד הוא עובד.

 

ת: התחביר עבור ארגומנטים משורת הפקודה ב‑Java הוא כזה:

 

public static void main(String[] args){
. . . 
}//end main method

 

 

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

 

ש: הסבר כיצד מסוגלת אפליקציית Java לקבוע את מספר הארגומנטים שהוכנסו בפועל על ידי המשתמש משורת הפקודה.

 

ת: את מספר האיברים במערך ההצבעות על אובייקטֵי String, אשר מכילים את הארגומנטים משורת הפקודה, ניתן להשיג באמצעות מאפיין length של המערך.

 

ש: כתוב תוכנית Java העונה על הדרישות הבאות.

 

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

 

הצג הודעת סיום שבה יופיע שמך.

 

/*File SampProg11.java from lesson 32
Copyright 1997, R.G.Baldwin
Without reviewing the following solution, write a Java
application that illustrates the handling of command-line
arguments in Java.

Provide a termination message that displays your name.
**********************************************************/
class SampProg11 { //define the controlling class
  public static void main(String[] args){ //define main
    for(int i=0; i < args.length; i++)
      System.out.println( args[i] );
    System.out.println("Terminating, Dick Baldwin");     
  }//end main
}//End SampProg11 class.

 

 25-12-03 / 21:01  נוצר ע"י רונית רייכמן  בתאריך 
 מבוא קצר לחריגות - הקודםהבא - קלט/פלט סטנדרטי 
תגובות הקוראים    תגובות  -  0
דרכונט
מהי מערכת הדרכונט?
אינך מחובר, להתחברות:
דוא"ל
ססמא
נושאי לימוד
חיפוש  |  לא פועל
משלנו  |  לא פועל
גולשים מקוונים: 6