Python'un etkileşimli REPL modu gibi bir şey var mı, ama Java için?


Yanıtlar:


64

düzenle Java 9'dan beri JShell var

Orijinal cevap aşağıdaki gibidir

Groovy Konsolunu da kullanabilirsiniz . İstediğinizi yapabileceğiniz etkileşimli bir konsoldur. Groovy ayrıca çekirdek java platformundan sınıflar içerdiğinden, bu sınıfları da kullanabileceksiniz.

Şöyle görünüyor:

Groovy'nin ekran görüntüsü


Ekran görüntüsü artık imaj korsanlığında mevcut değil.

Harika konsolla ilgili özellikle güzel olan şey, varsayılan olarak çok daha fazla paketin içe aktarılmasıdır (örn. Java.util. *), Bu nedenle çok fazla içe aktarma ifadesi yazmanıza gerek kalmaz
Dónal

2
Groovy'yi kuramayacak kadar tembel olanlar için, bu konsolun çevrimiçi bir sürümü burada mevcuttur: groovyconsole.appspot.com . Bazı JDK kitaplıkları kullanılamaz (örneğin, G / Ç ve System.exit()), ancak çoğu amaç için yeterli olmalıdır.
Dónal

Bu dersleri kabul etmiyor, bu normal mi? class test{public static void test(){System.out.println('test')}}
Lime

52

Eclipse, döngü olmasa da bunu yapma özelliğine sahiptir. Buna "Karalama Defteri Sayfası" deniyor. Sanırım benzetmenin, küçük kod parçacıkları topladığınız bir not defteriniz olması gerekiyor.

Her neyse, çalışmasını sağlamak için Eclipse'de bir proje açın (Karalama Defteri Sayfanız bir projeyle ilişkilendirilecektir - Eclipse, projeler bir şeyleri sahiplendiğinde onu sever).

Sonra:

  1. Proje gezgini penceresinde, projenizin herhangi bir yerinde bulunan bir klasör seçin.
  2. Dosya -> Yeni -> Diğer menüsünü seçin veya Control-N tuşlarına basın.
  3. Java -> Java Çalıştır / Hata Ayıkla -> Karalama Defteri Sayfası'nı seçin.
  4. "İleri" ye basın, ardından bir dosya adı verin ve ardından "Bitir" düğmesine basın.

Artık bir not defteri sayfanız var. Belki şuna benzer bir kod yazın:

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

Ardından metni fareyle seçin ve Control-U tuşlarına basın veya içerik menüsünden "Yürüt" ü seçin. Kod çalışacak ve çıktı konsolda görünecektir.

Ayrıca bir ifade yazabilir, onu seçebilir ve bağlam menüsünden Görüntüle'yi seçebilirsiniz. İfadeyi değerlendirecek ve türünü yazdıracaktır. Örneğin, Ekran açıkken 1 + 2yazdırılır (int) 3.


1
Bunun için teşekkürler. Beanshell benim için su sıçramasında zaman aşımına uğradı ama bu mükemmel çalışıyor.
Bayard Randel

3
Eclipse'i çok uzun süredir kullanıyorum ama bunu bilmiyordum, teşekkürler!
Tobold

28

BeanShell, Java ile yazılmış, nesne kodlama dili özelliklerine sahip küçük, ücretsiz, yerleştirilebilir bir Java kaynak yorumlayıcısıdır. BeanShell, standart Java sözdizimini dinamik olarak yürütür ve bunu, Perl ve JavaScript'tekiler gibi gevşek türler, komutlar ve yöntem kapatmaları gibi yaygın komut dosyası oluşturma kolaylıkları ile genişletir. BeanShell'i Java denemesi ve hata ayıklama için etkileşimli olarak kullanabilir ve ayrıca uygulamalarınızı yeni yollarla genişletebilirsiniz. Java komut dosyası oluşturma, hızlı prototip oluşturma, kullanıcı komut dosyası genişletme, kural motorları, yapılandırma, test, dinamik dağıtım, gömülü sistemler ve hatta Java eğitimi dahil olmak üzere çok çeşitli uygulamalara katkıda bulunur.

http://www.beanshell.org/

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


Daha az ayrıntılı sözdizimleri için Jython ve JRuby etkileşimli kabukları da vardır.
bakkal

1
BeanShell, BeanShell 2 olarak aktif olarak tutulur - code.google.com/p/beanshell2
hshib

Beanhell'i komut satırından çalıştırmanın basit bir örneğini burada bulabilirsiniz
Brad Parks

@hshib: Bu şimdi var Github ve geçen en Yani 2013 dan taahhüt değil "aktif olarak korunur".
Martin Schröder

@ MartinSchröder, bu yorum 2013
yılındaydı

19

Eclipse Scrapbook sayfalarını kullanabilirsiniz.

Eclipse'de bir Karalama Defteri sayfası oluşturun. Projenizde Yeni-> Diğer-> Karalama Defteri sayfası.

Dosyaya bir metin girin, onu seçin ve ctrl-U tuşlarına basın ve işte başlayın.

İçe aktarımlarınızı yönetmek için, sayfaya sağ tıklayın ve bir paketi veya tek bir sınıfı içe aktarmayı seçebileceğiniz İçe Aktarmaları Ayarla'yı seçin. Bu kalıcıdır ve sayfayla birlikte kaydedilir.


3
Yararlı olsa da, bir not defteri sayfası kalıcı bir oturum değildir, bu nedenle bir REPL kadar iyi çalışmaz.
MHarris

19

Eski soru, ancak şimdi daha iyi bir cevap var (Mayıs 2013) - java-REPL! Github'da mevcuttur ve hızlı bir defalık test için java-repl web sitesinde canlı olarak mevcuttur .

Git hub kodunu alır ve yapıları antoluşturmak için çalıştırırsanız , aşağıdaki gibi küçük bir komut dosyasıyla kullanımını kolaylaştırabilirsiniz:

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

Bu projeyi bulduğumdan beri muhtemelen günde 5 kez kullanıyorum. Zevk almak!


Çevrimiçi çoğaltmanın bağlantısı artık javarepl.com/term.html gibi görünüyor , eski bağlantı yalnızca Java hatalarını gösteriyor.
Tony

13

Henüz kimse Java'nın (6, 7) adlı bir REPL konsolu gönderdiğinden bahsetmemiş gibi görünüyor jrunscript. Dilden bağımsızdır (bu nedenle Jython, JRuby vb. İle kullanılabilir). Varsayılan olarak, yine varsayılan olarak paketlenmiş olan JavaScript (Rhino) 'dur ve diğer diller gibi, sınıf yolunda bulunan tüm paketlere / nesnelere erişebilirsiniz.




11

Jython , Java nesnelerini incelemenizi ve onlarla etkileşim kurmanızı sağlayan bir python uygulamasıdır.

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

Harika konsolu Bunu yapmaya izin verir. Aslında harika kodu denemek ve test etmek için tasarlanmıştı, ancak groovy Java'nın bir üst kümesi olduğu için düz Java şeylerine de izin veriyor.

Bunu konsola yeni girdim:

InetAddress.getAllByName('localhost')

ve CTRL-R'ye basın, sonra geri döndü:

groovy> InetAddress.getAllByName('localhost')

Result: [localhost/127.0.0.1]

7

Scala ayrıca etkileşimli bir konsol sunar. InetAddress'i aşağıdaki gibi tam olarak nitelendirerek sorunuzdaki ifade için bir sonuç almak üzere kullanabildim:

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

6

İken JRuby , BeanShell , Julian Fleischer'ın REPL orada Albert Latacz en REPL son ve aktif olarak görünmektedir.

Basit bir sınıf tanımıyla denedim, iyi çalışıyor.

$ 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'ya erişimi olan kişiler için JLink, Mathematica koduyla Java'ya ve komut dosyasına erişmenizi sağlar:

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

Değerlendirmek için Shift-Enter'a basın ve

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

Ardından toString, döndürülen nesneleri aramak için Mathematica'nın Harita işlevini kullanabilirsiniz :

#@toString[]& /@ %

sonucu elde etmek için (veya daha az anlaşılmaz sözdizimini kullanmak için Map[Function[obj, obj@toString[]], %]):

{"localhost/127.0.0.1"}

Bu konuda ciddileşmeye başlarsanız, http://reference.wolfram.com/mathematica/JLink/tutorial/Overview.html adresindeki Todd Gayley'in öğreticisini okumak isteyeceksiniz .


2

Groovy'yi zaten biliyorsanız (Groovy Konsolundan bahsettiğinizden beri bildiğinizi varsayıyorum), o zaman Groovy dağıtımında bulunan groovysh veya groovyConsole'u kullanın. İçe aktarmak istediğiniz özel kavanozlarınız varsa, sınıf yoluna eklenenlerle groovysh / groovyConsole'u başlatan bir toplu iş dosyası yazabilirsiniz. Bunu da yapabilirsin

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

diğer kavanozları yüklemek için kabuğun içinden.

Jython'u birkaç yıl önce tam istediğiniz şeyi yapmak için kullanırdım. Derleme komut dosyamın bir parçası olarak, üzerinde çalıştığım proje için tam sınıf yolunu içeren özel bir jython.bat ve .py dosyası oluşturdum. Bu şekilde Jython'u başlattığımda, tüm kod kullanılabilir olacaktı ve Spring'i canlı sistemdeki şeyleri değiştirmeme izin verecek şekilde ortaya çıkaracaktı. Aynı şeyi Groovy, JRuby, BeanShell vb. İle de yapabilirsiniz.


Harika kabuğu kullanabileceğimi biliyorum, ancak Groovy, Java ile tam olarak aynı anlam bilgisine sahip değil ve tip denetimi de yok. Dolayısıyla, Groovy kabuğunda çalışıyor gibi görünen bir Java kodu parçasıyla derleme hataları veya farklı çalışma zamanı davranışları alabilirim.
Dónal

groovy ayrıca ~ / .groovy / lib'deki tüm lib'leri de yükleyecektir, ya oradan bir şeyler kopyalayabilir ya da sembolik bağlar kullanabilirsiniz
Jason



1

Çoğu IDE'nin, java kodunu anında değerlendirmenize izin verecek "anında mod" gibi bir şey olarak adlandırılan bir penceresi vardır.


Eclipse istediğim şeye yakın bir "görüntü" görünümüne sahip. Sorun şu ki, uygulamanın çalıştırılması bağlamında olması gerekiyor. Bir uygulamayı çalıştırmam, kesme noktasında durmam gerekiyor ve ancak o zaman istediğimi yazabilirim.
Yoni Roit

@YoniRoit IMHO "display" + hata ayıklama modunu komut satırı REPL'den daha çok seviyorum. REPL w / Python'u uzun zaman önce kullanırdım, bu yüzden ikisini de yaptım. Bence bir Birim Testi yazıp bir kırılma noktası yerleştirip istenen bağlamla oynamak ve aynı zamanda her kodu tekrar birim testine yapıştırırken daha iyi. Düz bir REPL'de tam bir bağlam elde etmek, Birim Testi demekten çok daha zordur.
Adam Gent

1

Eclipse veya NetBeans gibi tam IDE yerine OOP'yi öğretmek için tasarlanmış etkileşimli bir Java geliştirme ortamı olan BlueJ'ye bir göz atabilirsiniz . Yine de oyun oynamak çok eğlenceli.

Bunu YouTube'da bir dizi Java eğiticisinde çalışırken görebilirsiniz.


bu ilginç. Bluej bir op repl gibidir. Şu anda bir repl kullandığınız şeyler için gerçekten yararlı değil, ancak bir yöntemi prototiplemek için bir repl kullanacağınız gibi oo tasarımınızı prototiplemek için kullanabilirsiniz.
Bill K

1

DrJava , bir REPL bölmesi içeren eğitim amaçlı bir IDE'dir.

Bir Eclipse eklentisi de var ama benim için işe yaramadı. Sanırım bir süredir güncellenmedi. Genelde yaptığım şey, "Bunu yaparsam ne olur" soruları için bir DrJava penceresini açık tutmaktır.

EclipseShell de iyi olabilir ama henüz kullanmadım.



1

Etkileşimler konsoluna sahip DrJava adlı basit bir IDE var. Tam olarak beklediğim gibi çalışıyor. Sadece bir dosya yükleyin ve içindeki nesnelerle etkileşime başlayın.




1

JPad , yerleşik bir REPL'e sahip bir java karalama defteri:

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>

Ayrıca koleksiyonları, listeleri, haritaları vb. Boşaltma konusunda akıllıdır ve bunları bir tablo veya grafik olarak oluşturmaya izin verir:

görüntü açıklamasını buraya girin


1

Java 9, JShell'i sağlıyor.

jshell> println( "Print me!")
jshell> Print me!

0

Jython, JRuby için JIRB , Groovy (groovyconsole ve diğerleri) ve Beanshell geçerli seçeneklerdir.

InteractiveConsoleJython için kullandım , uygulamada gerçekten güzel çalıştı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.