Czy istnieje coś takiego jak interaktywny tryb REPL w Pythonie, ale dla Javy?


92

Czy istnieje coś takiego jak interaktywny tryb REPL w Pythonie, ale dla Javy? Więc mogę na przykład wpisać InetAddress.getAllByName( localHostName )okno i natychmiast uzyskać wyniki, bez tego całego publicznego statycznego koszmaru void ()?



Odpowiedzi:


64

edytuj Od Java 9 istnieje JShell

Oryginalna odpowiedź następuje

Możesz także użyć Groovy Console . To interaktywna konsola, na której możesz robić, co chcesz. Ponieważ Groovy zawiera również klasy z podstawowej platformy java, będziesz mógł również z nich korzystać.

To wygląda tak:

Zrzut ekranu Groovy


Zrzut ekranu nie istnieje już w usłudze imageshack.

Co znajduje się w szczególnie miły o konsoli porywające jest to, że dużo więcej pakiety są importowane domyślnie, więc nie trzeba pisać tak wiele instrukcje importu (np java.util. *)
Donal

2
Dla tych, którzy są zbyt leniwi, aby zainstalować Groovy, dostępna jest wersja online tej konsoli: groovyconsole.appspot.com . Niektóre biblioteki JDK są niedostępne (np. I / O i System.exit()), ale do większości zastosowań powinno być wystarczające.
Dónal

To nie akceptuje zajęć, czy to normalne? class test{public static void test(){System.out.println('test')}}
Lime

52

Eclipse ma do tego funkcję, chociaż nie jest to pętla. Nazywa się to „stroną w notatniku”. Zakładam, że analogią jest to, że masz album z wycinkami, w którym zbierasz małe fragmenty kodu.

W każdym razie, aby to zadziałało, otwórz projekt w Eclipse (Twoja strona w notatniku będzie powiązana z projektem - Eclipse lubi to, gdy projekty są właścicielami rzeczy).

Następnie:

  1. W oknie nawigatora projektu wybierz folder, który istnieje gdzieś w projekcie.
  2. Wybierz menu Plik -> Nowy -> Inne lub naciśnij Control-N.
  3. Wybierz Java -> Java Run / Debug -> Scrapbook Page.
  4. Kliknij „Dalej”, nadaj mu nazwę pliku, a następnie naciśnij „Zakończ”.

Masz teraz stronę z notatnikiem. Wpisz kod, na przykład ten:

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

Następnie zaznacz tekst myszą i naciśnij Control-U lub wybierz „Wykonaj” z menu kontekstowego. Kod zostanie uruchomiony, a dane wyjściowe pojawią się na konsoli.

Możesz także wpisać wyrażenie, zaznaczyć je i wybrać Wyświetl z menu kontekstowego. Oceni wyrażenie i wypisze jego typ. Na przykład, uruchomienie Display on 1 + 2spowoduje wydrukowanie (int) 3.


1
Dziękuję za to. Beanshell mijał czas na powitanie, ale to działa idealnie.
Bayard Randel

3
Używam Eclipse od tak dawna, ale nie wiedziałem o tym, dzięki!
Tobold

28

BeanShell to mały, darmowy, wbudowywalny interpreter kodu źródłowego Java z funkcjami obiektowego języka skryptowego, napisany w języku Java. BeanShell dynamicznie wykonuje standardową składnię Java i rozszerza ją o typowe udogodnienia skryptowe, takie jak luźne typy, polecenia i zamknięcia metod, takie jak w Perlu i JavaScript. Możesz używać BeanShell w sposób interaktywny do eksperymentowania i debugowania języka Java, a także do rozszerzania aplikacji na nowe sposoby. Skrypty Java nadaje się do wielu różnych aplikacji, w tym do szybkiego prototypowania, rozszerzenia skryptów użytkownika, silników reguł, konfiguracji, testowania, dynamicznego wdrażania, systemów wbudowanych, a nawet edukacji w języku Java.

http://www.beanshell.org/

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


Istnieją również interaktywne powłoki Jython i JRuby dla mniej rozwlekłych składni.
bakkal

1
BeanShell jest aktywnie utrzymywany jako BeanShell 2 - code.google.com/p/beanshell2
hshib

Prosty przykład uruchomienia programu behell z wiersza poleceń można znaleźć tutaj
Brad Parks

@hshib: Jest teraz na Github, a ostatnie zatwierdzenie pochodzi z 2013. To nie jest „aktywnie utrzymywane”.
Martin Schröder

@ MartinSchröder, ten komentarz BYŁ w 2013 roku :-)
hshib

19

Możesz używać stron Eclipse Scrapbook.

W Eclipse utwórz stronę w notatniku. W Twoim projekcie, New-> Other-> Scrapbook page.

W pliku wprowadź tekst, zaznacz go i naciśnij ctrl-U i gotowe.

Aby zarządzać importami, kliknij prawym przyciskiem myszy na stronie i wybierz opcję Ustaw import, gdzie możesz wybrać import pakietu lub pojedynczej klasy. Jest to trwałe i zapisywane wraz ze stroną.


3
Choć może to być przydatne, strona w notatniku nie jest trwałą sesją, więc nie działa zbyt dobrze jako REPL.
MHarris

19

Stare pytanie, ale teraz jest lepsza odpowiedź (maj 2013) - java-REPL! Jest dostępny na github, a także dostępny na żywo w witrynie java-repl celu szybkiego jednorazowego przetestowania.

Jeśli pobierzesz kod centrum git i uruchomisz, antaby wygenerować artefakty, możesz ułatwić korzystanie z małego skryptu, takiego jak:

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

Odkąd znalazłem ten projekt, prawdopodobnie używam go 5 razy dziennie. Cieszyć się!


Wydaje się, że odsyłacz do odpowiedzi online brzmi teraz javarepl.com/term.html, a stary odsyłacz pokazuje tylko błędy Javy.
Tony

13

Wydaje się, że nikt jeszcze nie wspomniał, że Java (6, 7) dostarcza konsolę REPL o nazwie jrunscript. Jest niezależny od języka (więc może być używany z Jythonem, JRuby itp.). Domyślnie jest to JavaScript (Rhino), który również jest domyślnie dołączony i podobnie jak inne języki, możesz uzyskać dostęp do wszystkich pakietów / obiektów dostępnych w ścieżce klas.




11

Jython to implementacja języka Python, która umożliwia inspekcję obiektów Java i interakcję z nimi.

>>> 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])



7

Konsoli Groovy pozwala to zrobić. Właściwie miał na celu przetestowanie świetnego kodu, ale ponieważ groovy jest nadzbiorem Javy, pozwala również na zwykłe rzeczy w Javie.

Właśnie wpisałem to w konsoli:

InetAddress.getAllByName('localhost')

i naciśnij CTRL-R, po czym zwróciło:

groovy> InetAddress.getAllByName('localhost')

Result: [localhost/127.0.0.1]

7

Scala oferuje również konsolę interaktywną. Udało mi się go użyć, aby uzyskać wynik dla wyrażenia w twoim pytaniu, w pełni kwalifikując InetAddress, jak w:

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

6

Podczas gdy JRuby , BeanShell , Julian Fleischer's REPL są dostępne , REPL Alberta Latacza wydaje się być najnowszym i aktywnym.

Wypróbowałem to z prostą definicją klasy, działa dobrze.

$ 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

Dla osób z dostępem do Mathematica JLink umożliwia dostęp do języka Java i skryptu z kodem Mathematica:

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

Naciśnij Shift-Enter, aby ocenić, a otrzymasz

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

Następnie możesz użyć funkcji Map Mathematica do wywołania toStringzwróconych obiektów:

#@toString[]& /@ %

aby uzyskać wynik (lub użyć mniej niejasnej składni Map[Function[obj, obj@toString[]], %]):

{"localhost/127.0.0.1"}

Jeśli zaczniesz traktować to poważnie, zechcesz przeczytać samouczek Todda Gayleya pod adresem http://reference.wolfram.com/mathematica/JLink/tutorial/Overview.html .


2

Jeśli znasz już Groovy (co zakładam, że znasz, ponieważ wspomniałeś o Groovy Console), po prostu użyj groovysh lub groovyConsole, które są zawarte w dystrybucji Groovy. Jeśli masz niestandardowe pliki JAR, które chcesz zaimportować, możesz napisać plik wsadowy, który uruchamia groovysh / groovyConsole z tymi dodanymi do ścieżki klas. Ty też możesz to zrobić

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

z wnętrza powłoki, aby załadować inne słoiki.

Kilka lat temu używałem Jythona, aby robić to, o co prosisz. W ramach mojego skryptu kompilacji wygenerowałem niestandardowy plik jython.bat i .py, który zawierał pełną ścieżkę klasy dla projektu, nad którym pracowałem. W ten sposób, kiedy zacząłem Jython, miałby dostępny cały kod i wywołałby Spring, który pozwoliłby mi kręcić rzeczy w systemie na żywo. Możesz zrobić to samo z Groovy, JRuby, BeanShell itp.


Wiem, że mógłbym użyć groovy shell, ale Groovy nie ma dokładnie takiej samej semantyki jak Java i nie ma sprawdzania typów. Jest więc możliwe, że mogłem uzyskać błędy kompilacji lub inne zachowanie w czasie wykonywania z fragmentem kodu Java, który wydawał się działać w powłoce Groovy.
Dónal

groovy załaduje również całą bibliotekę do ~ / .groovy / lib, możesz albo skopiować tam rzeczy, albo użyć dowiązań symbolicznych
Jason



1

Większość IDE ma okno zwane czymś w rodzaju „trybu natychmiastowego”, które pozwala na ocenę kodu java w locie.


Eclipse ma widok „wyświetlania”, który jest zbliżony do tego, czego chcę. Problem w tym, że musi to być związane z uruchomioną aplikacją. Muszę uruchomić aplikację, zatrzymać się na punkcie przerwania i dopiero wtedy mogę wpisać, co chcę.
Yoni Roit

@YoniRoit IMHO Lubię "wyświetlanie" + tryb debugowania lepiej niż REPL z wiersza poleceń. Dawno temu używałem REPL w / Python, więc zrobiłem jedno i drugie. Myślę, że znacznie lepiej jest napisać test jednostkowy i umieścić punkt przerwania i bawić się pożądanym kontekstem podczas wklejania dowolnego kodu działającego z powrotem do testu jednostkowego. Uzyskanie dokładnego kontekstu w zwykłym REPL jest znacznie trudniejsze niż powiedzmy test jednostkowy.
Adam Gent

1

Możesz rzucić okiem na BlueJ, które jest interaktywnym środowiskiem programistycznym Java przeznaczonym do nauczania OOP, a nie jako pełne IDE, takie jak Eclipse lub NetBeans. Zresztą fajnie jest się z tym bawić.

Możesz zobaczyć to w akcji na YouTube w serii samouczków Java.


to jest interesujące. Bluej jest jak repl. Niezbyt przydatne w przypadku rzeczy, do których obecnie używasz repl, ale możesz użyć go do prototypowania swojego projektu oo, tak jak używałbyś repl do prototypowania metody.
Bill K

1

DrJava to edukacyjne IDE, które zawiera okienko REPL.

Jest też wtyczka Eclipse, ale nie zadziałała. Myślę, że od jakiegoś czasu nie był aktualizowany. Więc to, co zwykle robię, to pozostawienie otwartego okna DrJava na pytania „co się stanie, jeśli to zrobię”.

EclipseShell też może być dobry, ale jeszcze go nie używałem.



1

Istnieje proste środowisko IDE o nazwie DrJava, które ma konsolę interakcji. Działa dokładnie tak, jak bym się spodziewał. Wystarczy załadować plik i rozpocząć interakcję z zawartymi w nim obiektami.




1

JPad to brudnopis java z wbudowaną 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>

Jest również sprytny w kwestii zrzucania kolekcji, list, map itp. I umożliwia renderowanie ich jako tabeli lub wykresu:

wprowadź opis obrazu tutaj



0

Jython, JIRB for JRuby, Groovy (groovyconsole i in.) I Beanshell to dostępne opcje.

Użyłem InteractiveConsoledla Jythona, naprawdę dobrze działało w aplikacji.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.