มีบางอย่างเช่นโหมด REPL แบบโต้ตอบของ python แต่สำหรับ Java?


92

มีบางอย่างเช่นโหมด REPL แบบโต้ตอบของ python แต่สำหรับ Java? ตัวอย่างเช่นฉันสามารถพิมพ์InetAddress.getAllByName( localHostName )หน้าต่างและรับผลลัพธ์ได้ทันทีโดยไม่ต้องมีสิ่งฝันร้ายที่เป็นโมฆะสาธารณะทั้งหมดนี้?



คำตอบ:


64

แก้ไข เนื่องจาก Java 9 มีJShell

คำตอบเดิมมีดังนี้

นอกจากนี้คุณยังสามารถใช้Groovy คอนโซล เป็นคอนโซลแบบโต้ตอบที่คุณสามารถทำสิ่งที่คุณต้องการได้ เนื่องจาก Groovy มีคลาสจากแพลตฟอร์ม Java หลักด้วยคุณจึงสามารถใช้คลาสเหล่านั้นได้เช่นกัน

ดูเหมือนว่า:

ภาพหน้าจอของ Groovy


ไม่มีภาพหน้าจอบน imageshack อีกต่อไป

สิ่งที่ดีเป็นพิเศษเกี่ยวกับคอนโซล groovy คือมีการนำเข้าแพคเกจจำนวนมากขึ้นโดยค่าเริ่มต้น (เช่น java.util. *) ดังนั้นคุณไม่จำเป็นต้องเขียนคำสั่งนำเข้าจำนวนมาก
Dónal

2
สำหรับผู้ที่ขี้เกียจเกินไปที่จะติดตั้ง Groovy มีรุ่นออนไลน์ของคอนโซลนี้อยู่ที่นี่: groovyconsole.appspot.com JDK libs บางตัวไม่สามารถใช้งานได้ (เช่น I / O และ System.exit()) แต่สำหรับวัตถุประสงค์ส่วนใหญ่ควรเพียงพอ
Dónal

นี่ไม่รับเรียนเป็นเรื่องปกติเหรอ? class test{public static void test(){System.out.println('test')}}
มะนาว

52

Eclipse มีคุณสมบัติในการทำเช่นนี้แม้ว่าจะไม่ใช่การวนซ้ำ เรียกว่า "หน้าสมุดภาพ" ฉันคิดว่าการเปรียบเทียบควรจะเป็นว่าคุณมีสมุดเรื่องที่สนใจที่คุณเก็บตัวอย่างโค้ดเล็กน้อย

อย่างไรก็ตามเพื่อให้ทำงานได้ให้เปิดโครงการใน Eclipse (หน้าสมุดภาพของคุณจะเชื่อมโยงกับโครงการ - Eclipse ชอบเมื่อโครงการเป็นของตัวเอง)

จากนั้น:

  1. ในหน้าต่างตัวนำทางโครงการให้เลือกโฟลเดอร์ที่มีอยู่ในโปรเจ็กต์ของคุณ
  2. เลือกเมนูไฟล์ -> ใหม่ -> อื่น ๆ หรือกด Control-N
  3. เลือก Java -> Java Run / Debug -> Scrapbook Page
  4. กด "Next" จากนั้นตั้งชื่อไฟล์จากนั้นกด "Finish"

ตอนนี้คุณมีหน้าสมุดเรื่องที่สนใจ พิมพ์รหัสบางอย่างเช่นนี้:

System.out.println(System.getProperties());

จากนั้นเลือกข้อความด้วยเมาส์และกด Control-U หรือเลือก "Execute" จากเมนูบริบท โค้ดจะทำงานและผลลัพธ์จะปรากฏบนคอนโซล

คุณยังสามารถพิมพ์นิพจน์เลือกและเลือกแสดงจากเมนูบริบท มันจะประเมินนิพจน์และพิมพ์ประเภท ยกตัวอย่างเช่นการทำงานการแสดงผลบนจะพิมพ์1 + 2(int) 3


1
ขอบคุณสำหรับสิ่งนั้น Beanshell หมดเวลาในการสาดน้ำสำหรับฉัน แต่มันก็ใช้ได้ดี
Bayard Randel

3
ฉันใช้ Eclipse มานานแล้ว แต่ไม่รู้เรื่องนี้ขอบคุณ!
Tobold

28

BeanShell เป็นตัวแปลซอร์ส Java ขนาดเล็กฟรีที่ฝังได้พร้อมคุณสมบัติภาษาอ็อบเจ็กต์สคริปต์เขียนด้วย Java BeanShell เรียกใช้ไวยากรณ์ Java มาตรฐานแบบไดนามิกและขยายด้วยความสะดวกในการเขียนสคริปต์ทั่วไปเช่นประเภทหลวมคำสั่งและการปิดเมธอดเช่นเดียวกับใน Perl และ JavaScript คุณสามารถใช้ BeanShell แบบโต้ตอบสำหรับการทดลองและการแก้จุดบกพร่องของ Java รวมทั้งเพื่อขยายแอปพลิเคชันของคุณในรูปแบบใหม่ ๆ Scripting Java นำเสนอแอพพลิเคชั่นที่หลากหลายรวมถึงการสร้างต้นแบบอย่างรวดเร็วการขยายสคริปต์ของผู้ใช้เอ็นจินกฎการกำหนดค่าการทดสอบการปรับใช้แบบไดนามิกระบบฝังตัวและแม้แต่การศึกษา Java

http://www.beanshell.org/

http://www.beanshell.org/manual/syntax.html#Standard_Java_Syntax


นอกจากนี้ยังมีเชลล์แบบโต้ตอบ Jython และ JRuby สำหรับไวยากรณ์ที่ละเอียดน้อยลง
bakkal

1
BeanShell ได้รับการดูแลอย่างแข็งขันในฐานะ beanhell 2 - code.google.com/p/beanshell2
hshib

ตัวอย่างง่ายๆของการเรียกใช้ beanhell จากบรรทัดคำสั่งสามารถพบได้ที่นี่
Brad Parks

@hshib: ตอนนี้อยู่ที่Githubและคอมมิตสุดท้ายคือปี 2013 ซึ่งไม่ได้ "ดูแลอย่างแข็งขัน"
Martin Schröder

@ MartinSchröderความคิดเห็นนั้นเป็นใน 2013 :-)
hshib

19

คุณสามารถใช้หน้าสมุดภาพ Eclipse

ใน Eclipse ให้สร้างหน้า Scrapbook ในโครงการของคุณใหม่ -> อื่น ๆ -> หน้าสมุดภาพ

ในไฟล์ให้ป้อนข้อความเลือกและกด ctrl-U และไปที่นั่น

ในการจัดการการนำเข้าของคุณให้คลิกขวาในเพจแล้วเลือกตั้งค่าการนำเข้าซึ่งคุณสามารถเลือกที่จะนำเข้าแพ็คเกจหรือคลาสเดียว สิ่งนี้คงอยู่และถูกบันทึกด้วยเพจ


3
หน้าสมุดเรื่องที่สนใจไม่ได้เป็นเซสชันที่คงอยู่ดังนั้นจึงไม่ได้ผลดีเท่า REPL
MHarris

19

คำถามเก่า แต่มีคำตอบที่ดีกว่าตอนนี้ (พฤษภาคม 2013) - java-REPL! มีให้บริการบนgithubและยังมีอยู่ที่เว็บไซต์java-replสำหรับการทดสอบเพียงครั้งเดียวอย่างรวดเร็ว

หากคุณคว้ารหัส git hub และเรียกใช้antเพื่อสร้างสิ่งประดิษฐ์คุณสามารถใช้งานได้ง่ายด้วยสคริปต์ขนาดเล็กเช่น:

#!/bin/sh
java -jar /home/rdahlgren/scripts/javarepl-dev.build.jar

ตั้งแต่พบโครงการนี้ฉันอาจใช้มัน 5 ครั้งต่อวัน สนุก!


ลิงก์สำหรับการจำลองออนไลน์ตอนนี้ดูเหมือนจะเป็นjavarepl.com/term.htmlลิงก์เก่าแสดงข้อผิดพลาด Java
Tony

13

ดูเหมือนว่าไม่มีใครกล่าวถึงเลยว่า Java (6, 7) เรือคอนโซล REPL jrunscriptเรียกว่า เป็นภาษาที่ไม่เชื่อเรื่องพระเจ้า (สามารถใช้กับ Jython, JRuby เป็นต้น) โดยมีค่าเริ่มต้นเป็น JavaScript (Rhino) ซึ่งรวมอยู่ด้วยโดยค่าเริ่มต้นเช่นเดียวกับภาษาอื่น ๆ ที่คุณสามารถเข้าถึงแพ็คเกจ / วัตถุทั้งหมดที่มีอยู่ใน classpath


12

เป็นส่วนหนึ่งของ OpenJDK 9!

REPL ที่เรียกว่าJShell (พัฒนาโดย Oracle) ได้รับการเผยแพร่โดยเป็นส่วนหนึ่งของ JDK 9

เพียงดาวน์โหลด JDK ที่ 9 bin/jshellและการเปิดตัว

ภาพหน้าจอของ JShell

ทรัพยากร


11

เป็นอีกทางเลือกหนึ่งของ Groovy ลองใช้ Beanshell: http://www.beanshell.org/

เป็นเหมือน Java มากกว่าและช่วยให้คุณใช้ Java-syntax ได้โดยตรง


เปลือกถั่วได้รับการดูแลอีกต่อไปหรือไม่?
rogerdpack

1
BeanShell ได้รับการดูแลอย่างแข็งขันในฐานะ beanhell 2 - code.google.com/p/beanshell2
hshib

@hshib: ไม่การกระทำครั้งสุดท้ายใน github คือตั้งแต่ปี 2013
Martin Schröder

11

Jythonเป็นการใช้งาน python ซึ่งให้คุณตรวจสอบและโต้ตอบกับวัตถุ Java

>>> from java.net import *
>>> InetAddress.getAllByName("google.com")
array(java.net.InetAddress,[google.com/209.85.171.100, 
                            google.com/74.125.45.100,
                            google.com/74.125.67.100])

9

Java-REPL โดยAlbert Lataczทำงานได้ดี

คุณสามารถทดลองใช้งานได้โดยตรงจากเบราว์เซอร์ของคุณที่นี่: http://www.javarepl.com/term.html

ซอร์สโค้ดมีอยู่ที่นี่และมีปลั๊กอิน Intelli-J ที่เหมาะสม

https://github.com/albertlatacz/java-repl



7

Groovy คอนโซลช่วยให้คุณสามารถทำเช่นนั้นได้ จริงๆแล้วมันมีจุดประสงค์เพื่อทดลองและทดสอบโค้ด groovy แต่เนื่องจาก groovy เป็นส่วนเหนือของ Java จึงอนุญาตให้ใช้ Java ธรรมดาได้เช่นกัน

ฉันเพิ่งป้อนสิ่งนี้ลงในคอนโซล:

InetAddress.getAllByName('localhost')

และกด CTRL-R จากนั้นจะส่งกลับ:

groovy> InetAddress.getAllByName('localhost')

Result: [localhost/127.0.0.1]

7

Scalaยังมีคอนโซลแบบโต้ตอบ ฉันสามารถใช้มันเพื่อให้ได้ผลลัพธ์สำหรับนิพจน์ในคำถามของคุณโดยการกำหนด InetAddress ที่มีคุณสมบัติครบถ้วนดังใน:

java.net.InetAddress.getAllByName("localhost")

6

ในขณะที่JRuby , BeanShell , REPL ของ Julian Fleischerอยู่ที่นั่นREPL ของ Albert Lataczดูเหมือนจะล่าสุดและมีการใช้งานอยู่

ลองใช้คำจำกัดความคลาสง่ายๆก็ใช้ได้ดี

$ java -jar javarepl.jar
Welcome to JavaREPL version 56 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_17)
Type in expression to evaluate.
Type :help for more options.

java> public class Test {
    | public static void execute(String [] s) {
    |  System.out.println(54353 + s[0]);
    | }}

java> Test.execute(new String [] {"234343"});
54353234343

java> System.exit(0);

3

สำหรับผู้ที่สามารถเข้าถึง Mathematica JLink ช่วยให้คุณเข้าถึง Java และสคริปต์ด้วยรหัส Mathematica:

Needs["JLink`"]
LoadJavaClass["java.net.InetAddress"]
InetAddress`getAllByName["localhost"]

กด Shift-Enter เพื่อประเมินและคุณจะได้รับ

{<<JavaObject[java.net.Inet4Address>>}

จากนั้นคุณสามารถใช้ฟังก์ชันแผนที่ของ Mathematica เพื่อเรียกtoStringวัตถุที่ส่งคืน:

#@toString[]& /@ %

เพื่อให้ได้ผลลัพธ์ (หรือใช้ไวยากรณ์ที่คลุมเครือน้อยกว่าMap[Function[obj, obj@toString[]], %]):

{"localhost/127.0.0.1"}

หากคุณเริ่มต้นที่จะได้รับอย่างจริงจังกับเรื่องนี้คุณจะต้องอ่านกวดวิชาทอดด์ Gayley ที่http://reference.wolfram.com/mathematica/JLink/tutorial/Overview.html


2

หากคุณรู้จัก Groovy อยู่แล้ว (ซึ่งฉันคิดว่าคุณเป็นเช่นนั้นเนื่องจากคุณพูดถึง Groovy Console) ให้ใช้ groovysh หรือ groovyConsole ซึ่งรวมอยู่ใน Groovy distro หากคุณมีไหแบบกำหนดเองที่ต้องการนำเข้าคุณสามารถเขียนไฟล์แบตช์ที่เริ่มต้น groovysh / groovyConsole พร้อมกับที่เพิ่มลงใน classpath คุณยังสามารถทำได้

this.class.classLoader.rootLoader.addURL(new URL("file:///path to file"))

จากภายในเชลล์เพื่อบรรจุขวดอื่น ๆ

ฉันเคยใช้ Jython เมื่อหลายปีก่อนเพื่อทำสิ่งที่คุณต้องการ ในฐานะส่วนหนึ่งของสคริปต์การสร้างของฉันฉันได้สร้างไฟล์ jython.bat และ. py ที่กำหนดเองซึ่งรวมคลาสพา ธ แบบเต็มสำหรับโปรเจ็กต์ที่ฉันกำลังทำงานอยู่ ด้วยวิธีนั้นเมื่อฉันเริ่ม Jython มันจะมีรหัสทั้งหมดและมันจะเปิด Spring ขึ้นมาเพื่อให้ฉันเล่นเกมในระบบถ่ายทอดสด คุณสามารถทำสิ่งเดียวกันกับ Groovy, JRuby, BeanShell และอื่น ๆ


ฉันรู้ว่าฉันสามารถใช้ groovy shell ได้ แต่ Groovy ไม่มีความหมายเหมือนกับ Java ทุกประการและไม่มีการตรวจสอบประเภท ดังนั้นจึงเป็นไปได้ว่าฉันอาจได้รับข้อผิดพลาดในการคอมไพล์หรือพฤติกรรมรันไทม์ที่แตกต่างกันด้วยโค้ด Java ที่ดูเหมือนจะทำงานในเชลล์ Groovy
Dónal

groovy จะโหลด lib ทั้งหมดใน ~ / .groovy / lib คุณสามารถคัดลอกสิ่งต่างๆในนั้นหรือใช้ symlinks
Jason



1

IDE ส่วนใหญ่มีหน้าต่างที่เรียกว่า "โหมดทันที" ซึ่งจะช่วยให้คุณประเมินโค้ดจาวาได้ทันที


Eclipse มีมุมมอง "display" ซึ่งใกล้เคียงกับที่ฉันต้องการ ปัญหาคือต้องอยู่ในบริบทของการเรียกใช้แอปพลิเคชัน ฉันต้องเรียกใช้แอปหยุดที่เบรกพอยต์แล้วฉันจึงสามารถพิมพ์สิ่งที่ต้องการ
โยนีรากษส

@YoniRoit IMHO ฉันชอบโหมด "display" + debug ดีกว่าบรรทัดคำสั่ง REPL ฉันเคยใช้ REPL w / Python เมื่อนานมาแล้วดังนั้นฉันจึงได้ทำทั้งสองอย่าง ฉันคิดว่ามันดีกว่ามากที่จะเขียนการทดสอบหน่วยและวางจุดพักและเล่นกับบริบทที่ต้องการในขณะที่วางโค้ดใด ๆ ที่ใช้งานได้ในการทดสอบหน่วย การรับบริบทที่แน่นอนใน REPL ธรรมดานั้นยากกว่าการพูดแบบทดสอบหน่วย
Adam Gent

1

คุณสามารถดูที่BlueJซึ่งเป็นสภาพแวดล้อมการพัฒนา Java แบบโต้ตอบที่มีไว้สำหรับการสอน OOP แทนที่จะเป็น IDE แบบเต็มเช่น Eclipse หรือ NetBeans มันเป็นเรื่องสนุกที่จะเล่นด้วยต่อไป

คุณสามารถดูการใช้งานจริงบนYouTubeในชุดบทเรียน Java


สิ่งนี้น่าสนใจ Bluej เป็นเหมือนตัวจำลอง op ไม่มีประโยชน์จริงๆสำหรับสิ่งที่คุณใช้ในปัจจุบัน แต่คุณอาจใช้เพื่อสร้างต้นแบบการออกแบบ oo ของคุณได้เนื่องจากคุณจะใช้แบบจำลองเพื่อสร้างต้นแบบวิธีการ
Bill K

1

DrJavaเป็น IDE เพื่อการศึกษาที่มีบานหน้าต่าง REPL

มีปลั๊กอิน Eclipse ด้วย แต่มันไม่ได้ผลสำหรับฉัน ฉันคิดว่ามันยังไม่ได้รับการอัปเดตในขณะนี้ ดังนั้นสิ่งที่ฉันทำโดยทั่วไปคือเปิดหน้าต่าง DrJava ไว้สำหรับคำถาม

EclipseShell อาจดีเช่นกัน แต่ฉันยังไม่ได้ใช้



1

มี IDE ง่ายๆที่เรียกว่าDrJavaที่มีคอนโซลการโต้ตอบ มันทำงานได้ตามที่ฉันคาดหวัง เพียงโหลดไฟล์และเริ่มโต้ตอบกับวัตถุในนั้น




1

JPadเป็น Java scratchpad ที่มี REPL ในตัว:

C:\>jpad
       _ _____          _
      | |  __ \        | |
      | | |__) |_ _  __| |
  _   | |  ___/ _` |/ _` |
 | |__| | |  | (_| | (_| |
  \____/|_|   \__,_|\__,_|



Anything you type is evaluated as java.
The code is continuously appended until you call \clear.
Other Available Commands:
\exit - exit
\clear (n) - clear past java statements
\history - display all past java statements
\help - display this help

j>2+2
4
j>Math.sin(100.1)
-0.4177477
j>

นอกจากนี้ยังฉลาดในการทิ้งคอลเลกชันรายการแผนที่ ฯลฯ และอนุญาตให้แสดงผลเป็นตารางหรือแผนภูมิ:

ป้อนคำอธิบายภาพที่นี่



0

Jython, JIRBสำหรับ JRuby, Groovy (groovyconsole et al) และ Beanshell เป็นตัวเลือกที่ใช้งานได้ทั้งหมด

ฉันใช้InteractiveConsoleสำหรับ Jython มันใช้งานได้ดีในแอพจริงๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.